在KimBall的维度建模中,必须使用代理键作为每个维表的主键,用于处理缓慢变化维。
这个问题对于初学数仓维度建模的人而言,很容易陷入Kimball提出的代理键的漩涡之中,以至于把时间都浪费了。其实代理键在大数据仓库环境下显得很不合时宜,并且很难维护。在实际的建模中使用自然键是一个很好的选择,如果维度有一个复合主键,只需将它们与合理的分隔符连接在一起,即可根据多个自然键生成单个键。
总结下来不使用代理键主要有一下两个原因:
分布式计算系统,淡化了事务的概念,生成代理键的代价会很高
代理键会大大增加ETL的复杂性,对于ETL任务的开发和维护成本很高