雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id

Posted

技术标签:

【中文标题】雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id【英文标题】:Snowflake data warehouse - Generate dimension id with alpha-numeric character instead of integer 【发布时间】:2019-03-06 22:25:03 【问题描述】:

在 Snowflake 数据仓库中使用字母数字字符组合而不是整数生成维度 id 是否是个好主意? (https://www.snowflake.com/) 例如:假设我必须从具有 3 个键组合的源表构建维度表。通常我们构建增量整数列代理键作为维度 id。相反,创建一个字符串列 key1_key2_key3(concatenated source keys) 作为生成维度 id 的代理键是否更好?由于雪花是分布式数据库并且性能良好,我觉得这应该没问题。我想看看有什么不可预见的影响?

【问题讨论】:

整数总是会更快一些,并且使用更少的内存作为连接键,所以如果你可以管理它,它是一个首选的解决方案。 有道理!谢谢! 【参考方案1】:

您的问题似乎是:您应该使用代理键(单调递增的整数)还是业务键的串联作为维度中的主键。

除了使用代理键的存储和性能优势之外,您还需要考虑使用代理键的主要原因 - 缓慢变化的维度。如果您决定在某个时候跟踪对维度记录的更改,您将希望在维度中使用代理键,因为您的业务键的连接会随着时间的推移而重复。

【讨论】:

【参考方案2】:

我会将dimension id 创建为整数,并将另一列添加为surrogate key。因此,您将遵循标准并像所有其他维度表一样拥有一个整数键。如果您认为代理键有意义并将用于连接/过滤器,请随意添加。

我的观点是,在该特定维度表中将维度 id 作为整数将防止您偏离最佳实践。

此链接说明何时何地使用代理键是有意义的。

https://www.kimballgroup.com/1998/05/surrogate-keys/

【讨论】:

以上是关于雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库系列:星型模型和雪花型模型

Rust实现雪花算法生成唯一ID方案

Linux运维规范

数据仓库三大数据模式

雪花:是不是有一个查询会返回我在创建表时设置的数据类型? int 到 int,而不是 int 到数字?

如果参数是数字,我如何在雪花中获得一个 javascript 函数以返回一个值,或者如果参数不是数字,则返回另一个值?