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