为了在我们的hive数据仓库中实现代理密钥,我将范围缩小到2个选项:1) reflect('java.util.uuid','randomuuid')2)在\u文件中输入\u文件\u名称+块\u偏移量\u以上哪一项是更好的选择?或者你能推荐一个更好的吗?谢谢您。
brjng4g31#
用于orc和序列文件 BLOCK__OFFSET__INSIDE__FILE 不是每个文件唯一的,官方文档说它是当前块的第一个字节的文件偏移量在internet上的一些资源中,据说块\偏移\在\文件中是唯一的,在文本文件中是唯一的。即使这是真的,你为什么要限制自己的文本文件只。此外,uuid不依赖于输入文件,可以在一些转换后计算,在一个工作流中阅读kaffka主题,完全没有文件,等等,在其他一些系统中生成的uuid在您的系统中也是唯一的,因为uuid是全局唯一的。而且uuid的长度相同,不依赖于文件目录结构的长度,并且 INPUT__FILE__NAME 包含所有文件路径,这使文件名在同一文件系统中唯一。这就是为什么uuid是更好的解决方案
BLOCK__OFFSET__INSIDE__FILE
INPUT__FILE__NAME
rsl1atfo2#
我会使用内置的 SURROGATE_KEYS 自定义项。这比uuid有优势。当您在表中输入数据时,这个函数会自动为您的行生成数字id,并且执行速度比uuid快。例子:1) 以具有acid属性的默认orc格式创建students表。
SURROGATE_KEYS
CREATE TABLE students (row_id INT, name VARCHAR(64), dorm INT);
2) 在表中插入数据。例如:
INSERT INTO TABLE students VALUES (1, 'fred flintstone', 100), (2, 'barney rubble', 200);
3) 使用代理键udf创建students表的版本。
CREATE TABLE students_v2 (`ID` BIGINT DEFAULT SURROGATE_KEY(), row_id INT, name VARCHAR(64), dorm INT, PRIMARY KEY (ID) DISABLE NOVALIDATE);
4) 插入数据,它会自动为主键生成代理键。
INSERT INTO students_v2 (row_id, name, dorm) SELECT * FROM students;
5) 查看代理密钥。
SELECT * FROM students_v2;
6) 将代理键作为外键添加到另一个表中,例如student\u grades表,以加快表的后续联接。
ALTER TABLE student_grades ADD COLUMNS (gen_id BIGINT); MERGE INTO student_grades g USING students_v2 s ON g.row_id = s.row_id WHEN MATCHED THEN UPDATE SET gen_id = s.id;
7) 对代理键执行快速联接。(注意:此示例是从hortonworks文档中复制的,并将其添加到此处,因此即使删除了它的链接,我们也有一个示例可供参考):还有其他方法可以在表中使用代理键。这是讨论的好线索。https://community.hortonworks.com/idea/8619/how-do-we-create-surrogate-keys-in-hive.html
2条答案
按热度按时间brjng4g31#
用于orc和序列文件
BLOCK__OFFSET__INSIDE__FILE
不是每个文件唯一的,官方文档说它是当前块的第一个字节的文件偏移量在internet上的一些资源中,据说块\偏移\在\文件中是唯一的,在文本文件中是唯一的。即使这是真的,你为什么要限制自己的文本文件只。
此外,uuid不依赖于输入文件,可以在一些转换后计算,在一个工作流中阅读kaffka主题,完全没有文件,等等,在其他一些系统中生成的uuid在您的系统中也是唯一的,因为uuid是全局唯一的。而且uuid的长度相同,不依赖于文件目录结构的长度,并且
INPUT__FILE__NAME
包含所有文件路径,这使文件名在同一文件系统中唯一。这就是为什么uuid是更好的解决方案
rsl1atfo2#
我会使用内置的
SURROGATE_KEYS
自定义项。这比uuid有优势。当您在表中输入数据时,这个函数会自动为您的行生成数字id,并且执行速度比uuid快。例子:
1) 以具有acid属性的默认orc格式创建students表。
2) 在表中插入数据。例如:
3) 使用代理键udf创建students表的版本。
4) 插入数据,它会自动为主键生成代理键。
5) 查看代理密钥。
6) 将代理键作为外键添加到另一个表中,例如student\u grades表,以加快表的后续联接。
7) 对代理键执行快速联接。
(注意:此示例是从hortonworks文档中复制的,并将其添加到此处,因此即使删除了它的链接,我们也有一个示例可供参考):
还有其他方法可以在表中使用代理键。这是讨论的好线索。
https://community.hortonworks.com/idea/8619/how-do-we-create-surrogate-keys-in-hive.html