我有一个包含数十亿条记录的表。我想看看这张表在过去一个月里发生了怎样的变化。我在 1 月 1 日和 1 月 31 日分别有一个表导出的 CSV 文件。什么是查看文件在这段时间发生变化的好方法。例如:
pk old.name old.age new.name new.age diff (inferred)
1 david 18 david 18 UNCHANGED
2 charles 17 NULL NULL REMOVED
3 bob 19 bob 20 CHANGED
4001 NULL NULL bracey 14 ADDED
通常我只会使用 unix diff
命令,但单台计算机/服务器无法处理此问题。一种想法是将两个表保存到 BigQuery 并进行完全外部联接,例如:https://stackoverflow.com/a/19594004/651174 .查看记录如何更改?
这更像是一个概念性问题,关于我如何使用两个 csv 文件执行上述操作,每个文件都有数十亿条记录。我的目标是优化速度,因为这将是一个常见的操作。你有什么建议?
最佳答案
有比较数据库表的工具,比如pt-table-sync
。参见 https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html
您可以使用带有选项 --dry-run --print
的 pt-table-sync 来打印有多少不同而不是对数据进行任何更改。
此工具的优点是它按较小的 block 比较数据,而不是尝试一次读取整个表。对于具有数十亿行的表,这很重要。
关于mysql - 如何对两个大型数据源 (csv) 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492471/