我目前正在将数据从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)
答案 0 :(得分:2)
如果指定多个URI模式,数据将在它们之间进行分片。因此,如果您使用了28个URI模式,则每个分片大约为半个GB。您最终会得到每个模式的第二个大小为零的文件,因为这实际上是针对MR作业的,但它是实现您想要的一种方式。
此处有更多信息(请参阅多个通配符URI部分):Exporting Data From BigQuery