我正在尝试使用HIVE sql填充表格。这两个表都有相同的列,但我只关心tableSource中尚未在tableDest中的行。
表中的行有一个索引字段recordId(不是主要的)。我想在tableSource中添加所有行,其中recordId GREATER大于tableDest中的最高recordId。
我有一个基本的命令结构,我想象的语法不正确吗?
INSERT INTO tableDest
SELECT * FROM tableSource
WHERE tableSource.recordId >
(SELECT MAX(recordId) FROM tableDest);
我只想将最后一个select语句中的值用于条件。
我尝试过使用变量没有成功:
SET highest_record =SELECT MAX(recordId) FROM tableDest;
INSERT INTO tableDest
SELECT * FROM tableSource
WHERE tableSource.recordId > ${hiveconf:highest_record};
答案 0 :(得分:3)
not exists
是最佳选择。
INSERT INTO tableDest
SELECT *
FROM tableSource s
WHERE NOT EXISTS (SELECT 1
FROM tableDest d
WHERE s.recordId=d.recordId)