问题描述
我正在Hive中处理非常大的表,因此我希望避免在将表2到表1中的单个列连接时不得不创建一个全新的表。
我第一次将INSERT和UPDATE语句与以下测试数据一起使用无效。
是否可以做到这一点?还是通过将表1连接到表2然后删除表1来简单地创建表3?
DROP TABLE IF EXISTS table_1;
CREATE TABLE table_1 (id VARCHAR(64),cost INT,diag_cd VARCHAR(64));
INSERT INTO TABLE table_1
VALUES ('A0001',1000,'A1'),('A0001',2000,'B1'),3000,('B0001',5000,10000,15000,'C1'),('C0001',11000,14000,20000,'C1');
DROP TABLE IF EXISTS table_2;
CREATE TABLE table_2 (id VARCHAR(64),prodt_cd VARCHAR(64));
INSERT INTO TABLE table_2
VALUES ('A0001','OAP'),'OAPIN'),'MOAPIN');
INSERT INTO TABLE table_1 prodt_cd VARCHAR(64);
UPDATE table_1 t1 SET t1.prodt_cd = t2.prodt_cd
INNER JOIN table_2 t2
ON t1.id = t2.id;
解决方法
经过Mike67的研究和帮助,我找到了解决方案。
Hive似乎不支持COLUMN UPDATE或MERGE语句,但是一个简单的替代方法是创建一个空表,然后使用联接中的字段填充该表:
DROP TABLE IF EXISTS table_3;
CREATE TABLE table_3 LIKE table_1;
INSERT INTO TABLE table_3
SELECT a.*,b.prodt_cd
FROM table_1 AS a
LEFT OUTER JOIN table_2 AS b
ON a.id = b.id;