将数据从 bigquery 导出到 Google Cloud Storage 时控制文件大小

San*_*ngh 7 python-3.x google-cloud-storage google-bigquery google-cloud-platform

我正在致力于将大型数据集从 bigquery 导出到 Google 云存储并以压缩格式导出。在 Google 云存储中,我有文件大小限制(每个文件最大文件大小 1GB)。因此,我在导出时使用分割和同情技术来分割数据。示例代码如下:

gcs_destination_uri = 'gs://{}/{}'.format(bucket_name, 'wikipedia-*.csv.gz') 
gcs_bucket = storage_client.get_bucket(bucket_name)

# Job Config
job_config = bigquery.job.ExtractJobConfig()
job_config.compression = bigquery.Compression.GZIP

def bigquery_datalake_load():  
    dataset_ref = bigquery_client.dataset(dataset_id, project=project)
    table_ref = dataset_ref.table(table_id)
    table = bigquery_client.get_table(table_ref)  # API Request
    row_count = table.num_rows

    extract_job = bigquery_client.extract_table(
        table_ref,
        gcs_destination_uri,
        location='US',
        job_config=job_config)  # API request
    logging.info('BigQuery extract Started.... Wait for the job to complete.')
    extract_job.result()  # Waits for job to complete.

    print('Exported {}:{}.{} to {}'.format(
        project, dataset_id, table_id, gcs_destination_uri))
    # [END bigquery_extract_table]
Run Code Online (Sandbox Code Playgroud)

此代码将大型数据集分割并压缩为.gz格式,但它返回多个压缩文件,其大小在 40MB 到 70MB 之间舍入。

我正在尝试生成大小为 1GB 的压缩文件(每个文件)。有什么办法可以完成这件事吗?

Ale*_*kin 5

不幸的是,没有 - 谷歌自行调整 - 你没有指定大小的选项。我相信这是因为未压缩数据的大小(因此每个 BQ 工作人员生成一个文件,并且不可能从多个工作人员生成一个文件)