BigQuery 在追加模式下加载数据因 Hive 分区失败

JD-*_*D-V 5 google-bigquery

我的 GCS 中有以下数据结构

gs://BUCKET/inventory/date=2019-01-01/val=4/data.json
gs://BUCKET/inventory/date=2019-01-01/val=5/data.json

gs://BUCKET/inventory/date=2019-01-02/val=4/data.json
..
Run Code Online (Sandbox Code Playgroud)

我想将此数据加载到具有上述配置单元分区字段的现有 Bigquery 表中。现有的 BQ 表还包含 date 和 val 列,它们在路径中被引用为 hive 分区

job_config = bigquery.LoadJobConfig()
hive_partitioning = bigquery.external_config.HivePartitioningOptions()
hive_partitioning.mode = "AUTO"
hive_partitioning.source_uri_prefix = "gs://BUCKET/inventory" #path to hive partition data

job_config.hive_partitioning=hive_partitioning
job_config.autodetect = True
job_config.source_format="NEWLINE_DELIMITED_JSON"
job_config.write_disposition = bigquery.WriteDisposition.WRITE_APPEND

uri = "gs://BUCKET/inventory/*.json"    #path to data

output_dataset_ref = client.dataset("dataset_name")
load_job = client.load_table_from_uri(
    uri, output_dataset_ref.table("table_name"), job_config=job_config
)  # API request

load_job.result()  # Waits for table load to complete.
print("Load complete for table {}".format("table_name"))
Run Code Online (Sandbox Code Playgroud)

作业配置能够检测 Hive 分区列,例如日期和值。但作业失败并出现错误,指出日期列已存在。

但是,如果我尝试在新表中加载数据,则此代码可以工作,并且还可以添加 Hive 分区列。仅在附加到现有表的情况下才会失败。

详细的错误信息

google.api_core.exceptions.BadRequest:400 读取数据时出错,错误消息:无法将分区键日期(类型:TYPE_DATE)添加到架构中,因为已存在另一个同名列。这是不允许的。完整分区架构:[日期:TYPE_DATE,val:TYPE_INT64]。

我认为SDK存在一些问题,如果我错了,请纠正我。