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

mefy6pfw  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(400)

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

mwngjboj

mwngjboj1#

有一些工具可以比较数据库表,例如 pt-table-sync . 看到了吗https://www.percona.com/doc/percona-toolkit/latest/pt-table-sync.html
您可以使用pt table sync with options --dry-run --print ,以打印差异大小,而不是对数据进行任何更改。
此工具的优点是,它通过较小的数据块来比较数据,而不是试图一次性读取整个表。对于一个有数十亿行的表,这一点很重要。

相关问题