我有一个数据库表的两个版本(旧/新),大约有 100,000,000 条记录。它们在文件中:
trx-old
trx-new
结构是:
id date amount memo
1 5/1 100 slacks
2 5/1 50 wine
id 是简单的主键,其他字段是非键。我想生成三个文件:
trx-removed (ids of records present in trx-old but not in trx-new)
trx-added (records from trx-new whose ids are not present in trx-old)
trx-changed (records from trx-new whose non-key values have changed since trx-old)
我需要每天在一个短批处理窗口中执行此操作。实际上,我需要为多个表和多个模式(为每个模式生成三个文件)执行此操作,因此实际的应用程序涉及更多。但我认为这个例子抓住了问题的症结所在。
这感觉像是一个明显的 mapreduce 应用程序。从未编写过 mapreduce 应用程序,我的问题是:
- 是否有一些 EMR 应用程序已经这样做了?
- 是否存在明显的 Pig 或 Cascading 解决方案?
- 还有其他一些非常接近于此的开源示例吗?
PS 我看到了表格问题之间的差异,但那里的解决方案看起来没有可扩展性。
PPS 这是一个演示算法的小 Ruby 玩具:Ruby dbdiff