【问题标题】:how do I split a large csv.gz file in Google Cloud Storage?如何在 Google Cloud Storage 中拆分大型 csv.gz 文件?
【发布时间】:2018-01-22 21:11:56
【问题描述】:

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

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

有没有办法使用 gsutil 或类似的方法来拆分文件,而无需再次上传所有内容?

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我是这样处理的:

    首先,启动一个 Google Compute Engine 虚拟机实例。 https://console.cloud.google.com/compute/instances

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

    确认 gcloud、gsutil 和 bq 命令正常工作后,将磁盘快照保存为快照 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 连接到您的实例,然后在远程机器上运行这些命令。

    首先,将文件从云存储复制到虚拟机

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

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

    gunzip 20171130.gz
    

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

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

    现在文件已回到云存储中,您可以运行此命令来删除虚拟机。

    gcloud compute instances delete loader-2017-11-30
    

    理论上,关联的磁盘应该也被删除了,但是我发现磁盘还在,需要用一个额外的命令删除它

    gcloud compute disks delete disk-2017-11-30
    

    现在终于可以运行 bq load 命令或者从控制台加载数据了。

    【讨论】:

    • 可以使用流解压:gsutil cp gs://bucket/file.csv.gz - | gunzip | gsutil cp - gs://bucket/file.csv,这样就不需要任何本地磁盘来存储数据了
    猜你喜欢
    • 2012-01-02
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多