如何在Google云端存储中拆分大型csv.gz文件?

时间:2017-08-14 23:36:19

标签: google-bigquery google-cloud-storage gsutil

尝试在Google BQ中加载表时出现此错误:

  

输入CSV文件不可拆分且至少有一个文件   大于允许的最大尺寸。大小是:56659381010。最大   允许的大小是:4294967296。

有没有办法使用gsutil或类似的东西拆分文件而不必再次上传所有内容?

2 个答案:

答案 0 :(得分:2)

您可以加载到BigQuery中的最大压缩CSV文件是4 gigabytes。遗憾的是,GCS没有提供解压缩压缩文件的方法,也没有提供拆分压缩文件的方法。 GZip文件不能以tar文件的方式任意拆分和重新组装。

我想你最好的选择可能是在与GCS存储桶相同的区域中启动GCE实例,将对象下载到该实例(这应该非常快,因为它只有几十个gigabytes),解压缩对象(速度会慢一些),将CSV文件分解成一堆较小的文件(linux split命令对此有用),然后将对象上传回GCS。

答案 1 :(得分:0)

我遇到了同样的问题,这就是我处理它的方式:

首先,启动Google Compute Engine VM实例。 https://console.cloud.google.com/compute/instances

然后安装gsutil命令,然后完成身份验证过程。 https://cloud.google.com/storage/docs/gsutil_install

确认gcloud,gsutil和bq命令正在运行后,将磁盘快照保存为snapshot-1,然后删除此VM。

本地计算机上,运行此命令以创建新磁盘。此磁盘用于VM,以便您有足够的空间来下载和解压缩大文件。

gcloud compute disks create disk-2017-11-30 --source-snapshot snapshot-1 --size=100GB

再次在本地计算机上,运行此命令以创建使用此磁盘的新VM实例。我使用--preemptible标志来节省一些费用。

gcloud compute instances create loader-2017-11-30 --disk name=disk-2017-11-30,boot=yes --preemptible

现在您可以通过SSH连接到您的实例,然后在远程计算机上运行这些命令。

首先,将文件从云存储复制到VM

gsutil cp gs://my-bucket/2017/11/20171130.gz .

然后解压缩文件。就我而言,对于~4GB文件,完成此步骤大约需要17分钟:

gunzip 20171130.gz

解压后,您可以运行bq load命令将其加载到BigQuery中,但我发现对于我的文件大小(解压缩约70 GB),该操作大约需要4个小时。相反,我将解压缩的文件上传回云存储

gsutil cp 20171130 gs://am-alphahat-regional/unzipped/20171130.csv

现在该文件已回到云存储上,您可以运行此命令来删除VM。

gcloud compute instances delete loader-2017-11-30

理论上,关联的磁盘也应该已被删除,但我发现磁盘仍然存在,我需要使用附加命令删除它

gcloud compute disks delete disk-2017-11-30

现在最后,你应该能够运行bq load命令,或者你可以从控制台加载数据。