【问题标题】:Export table from Bigquery into GCS split sizes将 Bigquery 中的表导出到 GCS 拆分大小
【发布时间】:2018-11-18 00:02:12
【问题描述】:

我正在从 Bigquery 导出一个大小为 >1GB 的表到 GCS,但它会将文件拆分为 2-3 MB 的非常小的文件。有没有办法获得更大的文件,例如每个文件 40-60MB 而不是 2-3 MB。

我通过 api 进行导出 https://cloud.google.com/bigquery/docs/exporting-data#exporting_data_into_one_or_more_files

https://cloud.google.com/bigquery/docs/reference/v2/jobs

Bigquery 上的源表大小为 60 GB。我使用格式提取数据 - NewLine_Delimited_Json 和 GZIP 压缩

destination_cloud_storage_uris=[
        'gs://bucket_name/main_folder/partition_date=xxxxxxx/part-*.gz'
    ]

【问题讨论】:

  • 您如何从此处的选项中执行此提取操作(cloud.google.com/bigquery/docs/…)?如果您只运行以下命令:“bq extract . gs:///*.csv” 它会将您的表拆分为 2-3 MB 文件?我刚刚尝试使用该命令将我的 2.4 GB 表拆分为 6 个文件。
  • 问题中添加了更多详细信息
  • 根据您的描述,这似乎并不适合您。如果您的表不是分区表,那么您不应该获取这些小文件。那么,您能否在此链接中提出一个私人问题:issuetracker.google.com/issues/new?component=187164 提供您的项目编号(不是项目 ID)和尽可能多的描述您的案例的信息?随时在此处附上问题链接作为评论,最后的解决方案作为您自己问题的答案

标签: google-bigquery


【解决方案1】:

您是否要导出分区表?如果是,则每个分区都导出为不同的表,并且可能会导致小文件。 我使用以下每个命令在 cli 中运行导出,并在两种情况下都收到大小为 49 MB 的文件:

bq extract --compression=GZIP --destination_format=NEWLINE_DELIMITED_JSON project:dataset.table gs://bucket_name/path5-component/file-name-*.gz

bq extract --compression=GZIP project:dataset.table gs://bucket_name/path5-component/file-name-*.gz

【讨论】:

  • 您是否尝试使用此处提到的 cli 命令运行它?请详细说明——你有嵌套结构吗?
  • 我使用 API cloud.google.com/bigquery/docs/… 而不是 cli,行为是随机的,即对于某些运行,创建的文件大小约为 30 MB,对于某些运行,每个文件为 2-3 MB。我相信这取决于在 google 上运行的导出作业(将 BQ 导出到 GCS)以及用于运行该作业的分片/线程的数量。我不认为用户是否有办法控制分片/线程的数量或指定要生成的文件数量的任何限制
【解决方案2】:

请在问题中添加更多详细信息,以便我们提供具体建议:您究竟是如何要求此导出的?

不过,如果您在 GCS 中有很多文件并且您想将它们全部合并为一个,您可以这样做:

gsutil compose gs://bucket/obj1 [gs://bucket/obj2 ...] gs://bucket/composite

【讨论】:

  • 请在问题中找到更多详细信息
猜你喜欢
  • 2015-04-04
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多