处理大量文件以在Google Cloud中重新格式化

时间:2018-12-05 09:42:49

标签: google-cloud-platform google-bigquery google-cloud-storage google-cloud-functions google-cloud-dataprep

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

2 个答案:

答案 0 :(得分:0)

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

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

对于超过数千个文件而言,云功能将花费很长时间。

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

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

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

答案 1 :(得分:0)

您可以使用Dataflow进行此操作。

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

  

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

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

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