处理大量文件以在 google 云中重新格式化
Manipulate large number of files to reformat in google cloud
-
google-cloud-storage
-
google-bigquery
-
google-cloud-platform
-
google-cloud-functions
-
google-cloud-dataprep
我在 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。
google-cloud-storage
google-bigquery
google-cloud-platform
google-cloud-functions
google-cloud-dataprep
我在 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。