前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive3使用代理键

Hive3使用代理键

作者头像
大数据杂货铺
发布2020-04-07 10:28:39
9260
发布2020-04-07 10:28:39
举报
文章被收录于专栏:大数据杂货铺

您可以使用内置的SURROGATE_KEY用户定义函数(UDF)在将数据输入表中时自动为行生成数字ID。生成的代理键可以替换多个复合键。

Hive仅在ACID表上支持代理键,如以下表类型矩阵中所述:

表类型

ACID

代理键

文件格式

插入

更新/删除

托管:CRUD事务性

ORC

托管:仅插入式交易

任何

没有

托管:临时

没有

没有

任何

没有

外部

没有

没有

任何

没有

您要使用代理键联接的表不能具有需要转换的列类型。这些数据类型必须是原生类型,例如INT或STRING。

使用生成的键进行联接比使用字符串进行联接要快。使用生成的键不会通过行号将数据强制进入单个节点。您可以生成键作为自然键的抽象。代理键比UUID具有优势,后者速度较慢且具有概率。

SURROGATE_KEY UDF为您插入表中的每一行生成唯一的ID。它基于分布式系统中的执行环境生成键,其中包括许多因素,例如内部数据结构,表的状态和最后的事务ID。代理键生成不需要计算任务之间的任何协调。

UDF不带参数或带两个参数:

  • Write Id bit
  • Task ID bit

1. 以具有ACID属性的默认ORC格式创建一个学生表。

代码语言:javascript
复制
CREATE TABLE students (row_id INT, name VARCHAR(64), dorm INT);

2. 将数据插入表中。例如:

代码语言:javascript
复制
INSERT INTO TABLE students VALUES (1, 'fred flintstone', 100), (2, 'barney rubble', 200);

3. 使用SURROGATE_KEY UDF创建学生表的版本。

代码语言:javascript
复制
CREATE TABLE students_v2 
(`ID` BIGINT DEFAULT SURROGATE_KEY(),
 row_id INT,
 name VARCHAR(64), 
 dorm INT, 
 PRIMARY KEY (ID) DISABLE NOVALIDATE);

4. 插入数据,它会自动为主键生成代理键。

代码语言:javascript
复制
INSERT INTO students_v2 (row_id, name, dorm) SELECT * FROM students;

5. 看一下代理键。

代码语言:javascript
复制
SELECT * FROM students_v2;
+-----------------+---------------------+-------------------+-------------------+
| students_v2.id  | students_v2.row_id  | students_v2.name  | students_v2.dorm  |
+-----------------+---------------------+-------------------+-------------------+
| 1099511627776   | 1                   | fred flintstone   | 100               |
| 1099511627777   | 2                   | barney rubble     | 200               |
+-----------------+---------------------+-------------------+-------------------+                         

6. 将代理键作为外键添加到另一个表(例如student_grades表)中,以加快表的后续联接。

代码语言:javascript
复制
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;

现在,您可以在代理键上实现快速联接。

原来链接:https://docs.cloudera.com/runtime/7.0.3/using-hiveql/topics/hive_surrogate_keys.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档