我知道hive无法创建代理密钥,或者是相当困难的。我想了解公司是如何在他们的仓库中实现维度建模的。我能想到的一种方法是让维度细节保持原样。然后将维度的distinct移到另一个表中。那么scd1和scd2是如何处理的呢。我查看了金博尔在cloudera上的谈话,我仍然不明白这是怎么回事。
3vpjnl9f1#
在hive中有两种处理此问题的方法。第一种方法不能直接回答您的问题,即使用自然密钥而不是代理。虽然代理更方便、更高性能,但由于您使用的是hive,我猜性能并不是您的主要标准之一,因此使用自然键的成本将仅限于您为满足复合键而必须编写的额外代码行。第二种方法是使用hive的窗口函数来计算代理项。我没有现成的配置单元环境来测试此查询,但代理项看起来像:
(select max(surrogate_key_column) from dimension_table) + row_number() over (order by 1)
1条答案
按热度按时间3vpjnl9f1#
在hive中有两种处理此问题的方法。
第一种方法不能直接回答您的问题,即使用自然密钥而不是代理。虽然代理更方便、更高性能,但由于您使用的是hive,我猜性能并不是您的主要标准之一,因此使用自然键的成本将仅限于您为满足复合键而必须编写的额外代码行。
第二种方法是使用hive的窗口函数来计算代理项。我没有现成的配置单元环境来测试此查询,但代理项看起来像: