如何在两个大型数据源(csv)上进行差异

时间:2017-11-26 02:28:36

标签: mysql hadoop google-bigquery amazon-redshift

我有一张有几十亿条记录的桌子。我想看看这个表在过去一个月里是如何变化的。我在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文件执行上述操作,每个文件都有数十亿条记录。我的目标是优化速度,因为这将是一项常见的操作。你会建议什么?

1 个答案:

答案 0 :(得分:1)

有比较数据库表的工具,例如pt-table-sync。见https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html

您可以将pt-table-sync与选项--dry-run --print一起使用,以打印多少不同而不是对数据进行任何更改。

这个工具的优点是它可以用较小的块比较数据,而不是一次性尝试读取整个表。对于具有数十亿行的表,这很重要。