从 AVRO 加载到 BigQuery - 在目标表中指定十进制类型

Posted

技术标签:

【中文标题】从 AVRO 加载到 BigQuery - 在目标表中指定十进制类型【英文标题】:Loading from AVRO to BigQuery - specify decimal type in the target table 【发布时间】:2021-05-14 13:31:33 【问题描述】:

我正在使用 Google 的 Python SDK (https://googleapis.dev/python/bigquery/latest/index.html) 将 AVRO 文件加载到 BigQuery。由于数据中有BigNumeric 列,我需要指定--decimal_target_types=BIGNUMERIC 标志。有没有办法在 LoadJobConfig 对象中这样做?到目前为止我还没有成功:

import os
from google.cloud import bigquery

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './importer_google_credentials.json'

BUCKET_NAME = 'unique-bucket-name'
FILE_NAME = 'small-data-*.avro'

source_uri = 'gs:///'.format(BUCKET_NAME, FILE_NAME)
table_uri = "unique-table-name"

client = bigquery.Client()

job_config = bigquery.LoadJobConfig()
job_config.use_avro_logical_types = True
job_config.source_format = bigquery.SourceFormat.AVRO
job_config.autodetect = True
job_config.decimal_target_types = "BIGNUMERIC" #throws an AttributeError: Property decimal_target_types is unknown for <class 'google.cloud.bigquery.job.load.LoadJobConfig'>.

load_job = client.load_table_from_uri(
    source_uri, table_uri, job_config=job_config
)
load_job.result()  # Waits for the job to complete.

destination_table = client.get_table(table_uri)
print("Loaded  rows.".format(destination_table.num_rows))

【问题讨论】:

【参考方案1】:

截至 26.05.2021 似乎无法使用 Python SDK 实现我想要的。我最终使用了bq 命令行工具和--decimal_target_types=BIGNUMERIC

【讨论】:

以上是关于从 AVRO 加载到 BigQuery - 在目标表中指定十进制类型的主要内容,如果未能解决你的问题,请参考以下文章

推断 BigQuery 表加载的 avro 架构

分区 BigQuery 表,从 AVRO 加载

将 avro 十进制数据加载到 BigQuery 中?

将 Avro 文件加载到 BigQuery 失败并出现内部错误

如何将 Avro 文件加载到具有“时间戳”类型的列的 BigQuery 表中

如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?