配置单元中的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)
你对什么是最好的解决办法有什么建议吗?
1条答案
按热度按时间htzpubme1#
使用exist的解决方案是有效的。此外,连接值的解决方案是有效的,但是根据您可以找到的值,您可能正在删除不需要的数据,例如
您将删除011行,但它也匹配
这是不可能的。我建议在ID之间添加一个分隔符。
两个解决方案都应该使用mapper和reduce phase只执行一个作业,因此执行计划和性能应该几乎相同
当做!