代理键如何在配置单元中处理

时间:2018-08-12 04:01:37

标签: hive data-warehouse dimensional-modeling surrogate-key

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

我可以想到的一种方法是实际上保留尺寸细节。然后将维的唯一性移动到另一个表。但是,如何处理scd1和scd2。我检查了Kimball关于cloudera的谈话,但我仍然不明白这是如何工作的。

2 个答案:

答案 0 :(得分:0)

在Hive中有两种方法可以解决此问题。

第一个不会直接回答您的问题,那就是使用自然键而不是替代键。尽管代理更方便,更高效,但是由于您使用的是Hive,所以我猜测性能并不是您的主要标准之一,因此使用自然键的成本只是您必须编写的额外代码行中迎合复合键。

第二种方法是使用Hive的窗口功能来计算代理。我没有方便的Hive环境来测试此查询,但是代理看起来像:

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

答案 1 :(得分:-1)

据我所知,在 3.0 版本中,Hive 支持 ACID 表上的代理键

https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.1.4/using-hiveql/content/hive_surrogate_keys.html

来自链接的总结:


SURROGATE_KEY UDF 为您插入到表中的每一行生成一个唯一的 Id。

示例用法:

-创建表格

CREATE TABLE students_v2 
(`ID` BIGINT DEFAULT SURROGATE_KEY(),
 row_id INT,
 name VARCHAR(64), 
 dorm INT, 
 PRIMARY KEY (ID) DISABLE NOVALIDATE);

-插入数据,自动为主键生成代理键。

INSERT INTO students_v2 (row_id, name, dorm) SELECT * FROM students;

-看看代理键。

SELECT * FROM students_v2;