【发布时间】:2016-11-22 10:38:36
【问题描述】:
我有大量数据从 ETL 工具加载到数据库中。有时 etl 工具会生成一些不寻常的数据并将它们放在一个表中,比如为了简单起见,我想在我的数据库中填充 5 个正确的数据并得到 10 个作为结果,所以我检测到不一致。
作为将数据更新到我想要的状态的选项,我必须在我的控制下再次从 ETL 工具中截断 MySQL 数据库中的模式和插入数据。在这种情况下,一切看起来都不错,但是重新加载数据需要花费太多时间。
我调查了这个问题,发现删除数据并再次插入它需要更多时间,例如使用查询 INSERT…..ON DUPLICATE KEY UPDATE。所以我不需要删除所有数据,只需要在必要时检查和更新即可,这样可以节省我的加载时间。
我想使用这个查询,但我有点困惑,因为这些额外的 5 个错误数据已经存在于我的数据库中。如何在插入之前删除它们而不删除表中的所有内容??
【问题讨论】:
-
你能显示数据吗
-
很遗憾我不能在这里显示数据,但我可以说它的大小,大约 8GB
-
所以它们是帽子数据的一些唯一键,您可以通过它对该数据使用删除条件
-
我想过写一个删除数据的查询,这不受我之前的 INSERT.....ON DUPLICATE KEY UPDATE 查询的影响,但我不确定是否可以使用 SQL,需要也检查一下。
-
你必须让一个列成为唯一的键,这样它就不会重复了