Snowflake cloud data platform Snowflake中传统星形模式与宽表性能比较

Snowflake cloud data platform Snowflake中传统星形模式与宽表性能比较,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,在为雪花数据仓库设计数据模型时,是否有一个关于哪种类型的模型具有最佳性能的一般规则?具体来说,比较传统的星型模式和宽表 典型的事实表具有存储描述等字段的维度的代理键。如果结构进一步非规范化,并且这些描述被移动(或同时在事实表上移动)会怎么样?这更符合“一张大桌子”的做法。更改任何维度或事实上的值都需要“事实”表中的新记录,这显然会生成更多的数据“这个问题以前在很多变体中都被问过,最新的是 Snowflake的混合列/微分区表存储(以及其他具有纯列结构的数据库)意味着旧的真理不再有效,或者在某种程

在为雪花数据仓库设计数据模型时,是否有一个关于哪种类型的模型具有最佳性能的一般规则?具体来说,比较传统的星型模式和宽表


典型的事实表具有存储描述等字段的维度的代理键。如果结构进一步非规范化,并且这些描述被移动(或同时在事实表上移动)会怎么样?这更符合“一张大桌子”的做法。更改任何维度或事实上的值都需要“事实”表中的新记录,这显然会生成更多的数据“

这个问题以前在很多变体中都被问过,最新的是

Snowflake的混合列/微分区表存储(以及其他具有纯列结构的数据库)意味着旧的真理不再有效,或者在某种程度上不再有效


如果你有一个星型模式模型,这通常意味着你有一个数据仓库,它是通过批处理而不是通过许多小事务来更新的“可能不是禁止性的,应该进行调查。对于大多数数据消费者来说,一张大表肯定是最简单的。

答案在某种程度上取决于您的具体情况。在设计模式时,您通常必须平衡从许多不同的源/表摄取数据的易用性/速度/可恢复性,以及消费者易于理解(例如,编写复杂的分析查询)且在负载下性能良好的模型

我发现,以星型/雪花型格式维护核心数据模型能够独立地接收/转换/整合所有相应的事实和维度表

但是,我还有另一个转换/非规范化层,它将模型平坦化为一个支持分析的数据集。根据数据集的大小和数据的新鲜度要求,这可以通过一个简单的CTAS语句来完成,该语句从一个视图中提取必要的数据+交换(此解决方案可以在任何时候运行,而不会中断分析查询)


出于性能方面的原因,对于连接live和Snowflake的BI工具和分析人员来说,扁平表是必不可少的。对于不精通SQL的分析师来说,它可以抽象出所有底层连接的复杂性。

我非常喜欢接收数据并在数据到达时存储,这通常是一种更扁平的表结构。然而,如果你的桌子太宽,小心雪花。拥有太多的微分区也会造成性能问题。特别是对那些使用SELECT*来对付它的恶魔来说。是的,扩大一个表会相应地减少列存储在微分区中的积极影响,并且在某个地方(取决于表内容)会有一个收支平衡点,在那里列的好处会丢失,而微分区的开销仍然会增加税收。我们不想处于这种状态……远离联接是件好事,因为对于您的用户来说,它非常复杂,而且可以轻松地创建SQL,在SQL中,联接会创建大量的数据来进行转换(多对多联接)。存储空间也很便宜,所以如果你能侥幸逃脱的话,我肯定更喜欢一个更平坦的型号。