在 2 TB 数据的 BigQuery 中进行日期分区的有效方法是啥?

Posted

技术标签:

【中文标题】在 2 TB 数据的 BigQuery 中进行日期分区的有效方法是啥?【英文标题】:What is the efficient way of doing Date Partitioning in BigQuery of 2 TB data?在 2 TB 数据的 BigQuery 中进行日期分区的有效方法是什么? 【发布时间】:2017-07-07 09:40:01 【问题描述】:

目前我已经将数据作为分片导出到谷歌云,下载到服务器并流式传输到分区表,但问题是它需要很长时间。它以 1 Gb 的速度传输 40 分钟。请帮助我让它更快。我的机器是 12 内核和 20 Gb RAM CPU。

【问题讨论】:

为什么不从云存储加载数据而不是使用流式传输? 我想将所有这些数据在 bigquery 中再次分区,这样我就可以用来查询了。 @ElliottBrossard 可以将数据作为分区导出到谷歌云存储吗?因为现在所有数据都没有有序导出。 把数据放在不同的目录,然后看Pentium10的回答。 我有 6 个月的数据要导出。所以如果我开始在不同的目录中导出,那么它会花费更长的时间,因为每个日期我都必须运行不同的查询来创建一个新表,然后需要手动导出。如果我错了,请纠正我。 【参考方案1】:

您可以使用生成的 API 调用或其他方法将数据从 Google Cloud Storage 直接加载到您的分区中

要更新特定分区中的数据,在将数据加载到表中时,将分区修饰符附加到分区表的名称中。分区装饰器表示特定日期并采用以下形式:

$YYYYMMDD

例如,以下命令会将名为 mydataset.table1 的分区表中日期为 2016 年 1 月 1 日 (20160101) 的整个分区中的数据替换为从 Cloud Storage 存储分区加载的内容:

bq load  --replace --source_format=NEWLINE_DELIMITED_JSON 'mydataset.table1$20160101' gs://[MY_BUCKET]/replacement_json.json

注意:由于分区表中的分区共享表架构,因此替换分区中的数据不会替换表的架构。相反,新数据的模式必须与表模式兼容。要使用加载作业更新表的架构,请使用 configuration.load.schemaUpdateOptions。

阅读更多https://cloud.google.com/bigquery/docs/creating-partitioned-tables

【讨论】:

以上是关于在 2 TB 数据的 BigQuery 中进行日期分区的有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

bigquery 使用时区转换字符串日期时间

BigQuery 负载作业限制为 15 TB

适用于 BigQuery 的最佳 Google Cloud Storage

从 BigQuery 到数据洞察的日期格式

按日期对表进行分段的 BigQuery 最佳做法

如何在数据工作室的 bigquery 中将年份整数解析为日期?