hive用复合主键删除行

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

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

  1. DELETE FROM table
  2. WHERE id IN (SELECT id FROM raw_table)

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

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

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

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

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

htzpubme

htzpubme1#

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

  1. id1: 01
  2. id2: 1

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

  1. id1: 0
  2. id2: 11

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

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

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

展开查看全部

相关问题