mysql - 如何对两个大型数据源 (csv) 进行比较

标签 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 文件执行上述操作,每个文件都有数十亿条记录。我的目标是优化速度,因为这将是一个常见的操作。你有什么建议?

最佳答案

有比较数据库表的工具,比如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/

相关文章:

linux - 如何用hadoop打印文件树?

google-bigquery - BigQuery 记录类型缺失

python - Google BigQuery Schema 冲突(pyarrow 错误)与使用 load_table_from_dataframe 的数字数据类型

php - MySql SELECT 查询中包含大量数字的 IN 子句处理缓慢

mysql - 根据连接表 SQL 中的其他值选择值

hadoop - Hadoop MapReduce 何时运行组合器的权威来源

performance - 平衡 HDFS -> HBase mapreduce 作业的想法

sql - BigQuery中,如何随机拆分查询结果?

java - mysql和java(观察更新、建表、删表、编辑信息)

mysql - 修复 MySQL 错误 1064