雪花数据加载最佳实践规范化还是非规范化?
Posted
技术标签:
【中文标题】雪花数据加载最佳实践规范化还是非规范化?【英文标题】:Snowflake data load best practices normalized or de-normalized? 【发布时间】:2019-11-20 04:13:01 【问题描述】:打算在 Snowflake 上进行 POC,只是想检查将数据加载到雪花的最佳做法是什么:
-
应该以规范化的形式加载数据(将相关信息分组并存储到多个表中)还是使用非规范化形式?这里推荐什么..?
还是将数据转储到一张表并从一张表创建多个视图?但是想想这张大表有 1.5 亿条记录,它有一个名为 Australia State 的列,我们知道我们在澳大利亚只有 6 个州。如果创建一个视图以通过视图从主表中提取澳大利亚州信息,我觉得这比将澳大利亚州信息存储在单独的表中更昂贵,这就是我所说的规范化..?
在 Snowflake 中加载 SCD-2 维度的方法是什么?有兴趣了解执行此操作的有效方法吗?
【问题讨论】:
【参考方案1】:您的问题 1. 和 2. 似乎更多是关于分区(或雪花术语中的“集群”)而不是规范化。它还与性能与可维护性有关。
最好的两个世界是有一个表,其中Australia State
是一个集群键。正确的设置将允许高效的Query pruning。在Clustering Keys & Clustered Tables 中阅读更多内容。
回复。问题3。查看MERGE
。也许你也可以通过阅读Working with SCD-Type-II in Snowflake得到一些提示
【讨论】:
【参考方案2】:我会以“对如何‘更新’和‘使用’最有意义”的方式加载数据
这意味着我们拥有从 PostgreSQL 数据库同步/流式传输的数据(实际上有多种形式),其中一些我们在加载时对其进行维度(SCD1/SCD2/SCD6)。对于这些数据,我们有我们加载记录的更新时间戳,我们测试更改并构建维度数据。
如果您已经有维度数据,并且这是一个单一的数据移动。转储您拥有的表格并加载它们。在雪花中创建一个新表真的很便宜,所以我们只是尝试了一些东西并找出适合我们的数据入口模式的东西,以及我们如何读取数据以改进/帮助集群,或者避免自动集群操作的成本流失.
【讨论】:
以上是关于雪花数据加载最佳实践规范化还是非规范化?的主要内容,如果未能解决你的问题,请参考以下文章