【发布时间】:2017-11-26 02:28:35
【问题描述】:
我有一张包含数十亿条记录的表。我想看看这张表在过去一个月里发生了怎样的变化。我在 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 文件执行上述操作,每个文件都有数十亿条记录。我的目标是优化速度,因为这将是一种常见的操作。你有什么建议?
【问题讨论】:
-
你可能想看看亚马逊红移光谱aws.amazon.com/redshift/spectrum 或亚马逊雅典娜aws.amazon.com/athena
-
这些听起来不是很好的建议。在 Athena 中加入大型 CSV 文件听起来像是极慢查询的秘诀。大卫,到目前为止你有什么尝试?您是否尝试过使用外部联接?
-
This is more a conceptual question- 从概念上讲 - 只需将 csv 文件加载到 GBQ 并执行FULL OUTER JOIN -
@JonScott 使用频谱或雅典娜有什么区别?如果数据已经在 s3 中,这听起来比 BQ 更简单,因为在这种大小的文件上传输数据本身需要一个小时左右。
-
我宁愿只迭代 StackOverflow,因为我有很多义务,抱歉。听起来像将文件加载到 BigQuery 并使用完整的外部连接就足够了。
标签: mysql hadoop google-bigquery amazon-redshift