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

时间:2015-02-05 00:36:44

标签: google-bigquery google-cloud-storage

我目前正在将数据从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'
   }
 }

}

query_response = query_request.insert(projectId=constants.PROJECT_NUMBER,
                                     body=query_data).execute()

由于存在一个约束,即每个文件只能导出1GB到GCS,我使用了单个通配符URI(https://cloud.google.com/bigquery/exporting-data-from-bigquery#exportingmultiple)。这会将文件拆分为多个较小的部分。拆分后,每个文件部分也都进行了压缩。

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

1 个答案:

答案 0 :(得分:2)

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

此处有更多信息(请参阅多个通配符URI部分):Exporting Data From BigQuery