从 BigQuery 将数据导出到 GCS - 拆分文件大小控制

act*_*ner 5 google-cloud-storage google-bigquery

我目前正在将数据从 Bigquery 导出到 GCS 存储桶。我使用以下查询以编程方式执行此操作:

query_request = bigquery_service.jobs()

DATASET_NAME = "#######";
PROJECT_ID = '#####';
DATASET_ID = 'DestinationTables';

DESTINATION_PATH = 'gs://bucketname/foldername/'
query_data = {
'projectId': '#####',
'configuration': {
  'extract': {
    'sourceTable': {
            'projectId': PROJECT_ID,
            'datasetId': DATASET_ID,
            'tableId': #####,
     },
    'destinationUris': [DESTINATION_PATH + my-files +'-*.gz'],
    'destinationFormat': 'CSV',
    'printHeader': 'false',
    'compression': 'GZIP'
   }
 }
Run Code Online (Sandbox Code Playgroud)

}

query_response = query_request.insert(projectId=constants.PROJECT_NUMBER,
                                     body=query_data).execute()
Run Code Online (Sandbox Code Playgroud)

由于存在每个文件只能导出到 GCS 1GB 的限制,因此我使用了单个通配符 URI ( https://cloud.google.com/bigquery/exporting-data-from-bigquery#exportingmultiple )。这会将文件分割成多个较小的部分。分割后,每个文件部分也会被 gzip 压缩。

我的问题:我可以控制分割文件的文件大小吗?例如,如果我有一个 14GB 的文件要导出到 GCS,则该文件将被拆分为 14 个 1GB 的文件。但是有没有办法将 1GB 更改为另一个大小(小于 gzip 压缩之前的 1GB)?我检查了可用于修改configuration.extract对象的各种参数?(参考:https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.extract

Gra*_*ler 3

如果指定多个 URI 模式,数据将在它们之间分片。因此,如果您使用 28 个 URI 模式,每个分片将约为半 GB。对于每个模式,您最终都会得到大小为零的第二个文件,因为这实际上是针对 MR 作业的,但它是完成您想要的任务的一种方法。

更多信息请参见此处(请参阅多个通配符 URI 部分):从 BigQuery 导出数据