尝试在Google BQ中加载表时出现此错误:
输入CSV文件不可拆分且至少有一个文件 大于允许的最大尺寸。大小是:56659381010。最大 允许的大小是:4294967296。
有没有办法使用gsutil或类似的东西拆分文件而不必再次上传所有内容?
答案 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命令,或者你可以从控制台加载数据。