我有一张有几十亿条记录的桌子。我想看看这个表在过去一个月里是如何变化的。我在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文件执行上述操作,每个文件都有数十亿条记录。我的目标是优化速度,因为这将是一项常见的操作。你会建议什么?
答案 0 :(得分:1)
有比较数据库表的工具,例如pt-table-sync
。见https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html
您可以将pt-table-sync与选项--dry-run --print
一起使用,以打印多少不同而不是对数据进行任何更改。
这个工具的优点是它可以用较小的块比较数据,而不是一次性尝试读取整个表。对于具有数十亿行的表,这很重要。