2

我在 Google 云存储中有大量 json 文件,我想将它们加载到 Bigquery。平均文件大小为 5MB,未压缩。问题是它们不是新行分隔的,所以我无法将它们按原样加载到 bigquery。我在这里最好的方法是什么?我应该使用 Google 功能或数据准备,还是只是启动服务器并让它下载文件、重新格式化并将其上传回云存储,然后再上传到 Bigquery?

4

2 回答 2

0

在加载到 Bigquery 之前不要压缩数据。另一个项目,5 MB 对于 Bigquery 来说很小。我会查看合并策略,并可能在处理每个 Json 文件时更改文件格式。

您可以使用 Dataprep、Dataflow 甚至 Dataproc。根据文件的数量,这可能是最佳选择。任何大于 100,000 个 5 MB 文件的文件都需要这些具有许多节点的大型系统之一。

对于超过几千个文件的任何内容,Cloud Functions 都需要很长时间。

另一种选择是编写一个简单的 Python 程序,在 Cloud Storage 上预处理您的文件并将它们直接加载到 BigQuery 中。除非您添加合并,否则我们只讨论 20 或 30 行代码。一个 5 MB 的文件大约需要 500 毫秒来加载、处理和回写。我不确定 Bigquery 的加载时间。对于 50,000 个 5 MB 文件,大型 Compute Engine 实例上的一个线程需要 12 到 24 小时(您需要高网络带宽)。

另一种选择是启动多个计算引擎。一个引擎会将每条消息的 N 个文件的名称(例如 4 或 16 个)放入 Pub/Sub。然后多个 Compute 实例订阅同一个主题并并行处理文件。同样,这只是另外 100 行代码。

如果您的项目包含数百万个文件,则网络带宽和计算时间将是一个问题,除非时间不是一个因素。

于 2018-12-05T10:46:34.817 回答
0

您可以使用Dataflow来执行此操作。

选择“Cloud Storage 上的文本文件到 BigQuery”模板:

可以读取存储在 GCS 中的文本文件、通过用户定义的 javascript 函数执行转换并将结果加载到 BigQuery 的管道。此管道需要一个 javascript 函数和一个描述生成的 BigQuery 架构的 JSON。

创建作业时,您需要在 Javascript 中添加一个 UDF,该 UDF 将 JSON 转换为新行分隔的 JSON。

这将从 GCS 检索文件、转换它们并自动将它们上传到 BigQuery。

于 2018-12-06T09:20:05.463 回答