我有大量数据从ETL工具加载到数据库中。有时etl工具生成一些不寻常的数据并将它们放在一个表中,比如说我想要填充5个正确的数据并在我的数据库中获得10个结果,所以我检测到了不一致。
作为将数据更新到我想要的状态的选项我必须在MySQL数据库中TRUNCATE模式并在我的控制下再次从ETL工具INSERT数据。在这种情况下,一切看起来都不错,但重新加载数据需要花费太多时间。
我调查了这个问题并发现删除数据并再次插入它需要花费更多的时间,例如使用查询INSERT ... ..ON DUPLICATE KEY UPDATE。所以我不需要删除所有数据,但可以在必要时检查并更新它,这将节省我的加载时间。
我想使用这个查询,但我有点困惑,因为这些额外的5个错误数据已经存在于我的数据库中。在插入??
之前,如何在不删除表格中的所有内容的情况下删除它们答案 0 :(得分:0)
你提到
“有时etl工具会生成一些不寻常的数据并将其放入其中 一张桌子“
您需要调查您的ETL代码并进行更正。它不会产生任何数据,ETL工具只会根据规则转换您的数据。专注于ETL代码而不是MySQL数据库。
答案 1 :(得分:0)
对我而言,您的ETL工具中的数据流设置听起来有问题。您没有说出您正在使用的内容,但我会回顾选择标准并查看您选择的字段以及您的WHERE标准。也许WHERE语句中的内容会导致额外的数据。
对于INSERT ... ON DUPLICATE KEY UPDATE语法,请确保InnoDB表中没有AUTO_INCREMENT列。因为在这种情况下只有INSERT会增加自动增量值。并检查您的表没有多个唯一索引,因为如果您的WHERE a = xx匹配多行,则只会更新1行。 (MySQL 5.7,参见参考手册:https://dev.mysql.com/doc/refman/5.7/en/。)
如果您发现您的ETL工具没有提供足够的灵活性,那么您可以调查其他选项。这是一篇好文章comparing ETL tools。