2

我知道 hive 不能创建代理键或者相当困难。我想了解公司如何在其仓库中实施维度建模。

我能想到的一种方法是将尺寸细节保持原样。然后将不同的维度移动到不同的表中。但是然后如何处理scd1和scd2。我已经检查了 Kimball 在 cloudera 上的谈话,但我仍然不明白这是如何工作的。

4

2 回答 2

0

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

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

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

(select max(surrogate_key_column) from dimension_table)
+ row_number() over (order by 1)
于 2018-08-12T04:40:35.507 回答
-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;
于 2021-07-06T07:55:26.820 回答