Hive 代理项键在配置单元中的句柄方式

Hive 代理项键在配置单元中的句柄方式,hive,data-warehouse,dimensional-modeling,surrogate-key,Hive,Data Warehouse,Dimensional Modeling,Surrogate Key,我知道hive无法创建代理密钥,或者这相当困难。我想了解公司是如何在其仓库中实施尺寸建模的 我能想到的一种方法是让维度细节保持不变。然后将维度的不同部分移动到另一个表中。那么scd1和scd2是如何处理的呢。我查看了Kimball在cloudera上的谈话,但我仍然不明白这是如何工作的。在Hive中有两种方法来处理这个问题 第一种方法不能直接回答您的问题,即使用自然关键点而不是代理。虽然代理更方便、更高性能,但由于您使用的是Hive,我猜性能不是您的主要标准之一,因此使用自然键的成本将仅限于为满

我知道hive无法创建代理密钥,或者这相当困难。我想了解公司是如何在其仓库中实施尺寸建模的


我能想到的一种方法是让维度细节保持不变。然后将维度的不同部分移动到另一个表中。那么scd1和scd2是如何处理的呢。我查看了Kimball在cloudera上的谈话,但我仍然不明白这是如何工作的。

在Hive中有两种方法来处理这个问题

第一种方法不能直接回答您的问题,即使用自然关键点而不是代理。虽然代理更方便、更高性能,但由于您使用的是Hive,我猜性能不是您的主要标准之一,因此使用自然键的成本将仅限于为满足复合键而必须编写的额外代码行

第二种方法是使用配置单元的窗口函数来计算代理项。我没有现成的配置单元环境来测试此查询,但代理项看起来像:

(select max(surrogate_key_column) from dimension_table)
+ row_number() over (order by 1)

这是可以做到的。但我想知道你们是否在他们的公司里实施这一点。你在工作中使用第二种方法吗?如果我们从多个表创建事实,那么使用NK方法也不起作用。NK将重叠。我在Hive中没有使用过这种方法,但我在其他数据仓库环境中广泛使用过这种方法。我不明白为什么多个表会阻止使用自然键。。。例如,表1中的CustomerA肯定与表2中的CustomerA相同吗?如果不是,那么自然键还应该包括由单独的表表示的概念。如果你能分享你的表格的更多细节,这将有助于更好地理解这个问题。