hive用复合主键删除行

gt0wga4j  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(498)

配置单元中的acid属性允许使用以下语法从表中删除行:

DELETE FROM table 
WHERE id IN (SELECT id FROM raw_table)

但是,当主键由多个列组成时,删除行的最佳解决方案是什么?
我已使用exists尝试了以下操作:

DELETE FROM table 
WHERE EXISTS (SELECT id1, id2 FROM raw_table 
              WHERE raw_table.id1 = table.id1 AND raw_table.id2 = table.id2)

或以下内容(连接所有列,不确定是否有效):

DELETE FROM table 
WHERE CONCAT(id1, id2) IN (SELECT CONCAT(id1, id2) FROM raw_table)

你对什么是最好的解决办法有什么建议吗?

htzpubme

htzpubme1#

使用exist的解决方案是有效的。此外,连接值的解决方案是有效的,但是根据您可以找到的值,您可能正在删除不需要的数据,例如

id1: 01
id2: 1

您将删除011行,但它也匹配

id1: 0
id2: 11

这是不可能的。我建议在ID之间添加一个分隔符。

DELETE FROM table 
WHERE CONCAT(id1, id2) IN (SELECT CONCAT(CONCAT(id1,"-"), id2) FROM raw_table)

两个解决方案都应该使用mapper和reduce phase只执行一个作业,因此执行计划和性能应该几乎相同
当做!

相关问题