处理大量文件以在 google 云中重新格式化

Manipulate large number of files to reformat in google cloud

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

在加载到 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 行代码。

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

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

选择“云存储上的文本文件到 BigQuery”模板:

A pipeline that can read text files stored in GCS, perform a transform via a user defined javascript function, and load the results into BigQuery. This pipeline requires a javascript function and a JSON describing the resulting BigQuery schema.

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

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