Google bigquery 追加模式下的BigQuery加载数据与配置单元分区一起失败

Google bigquery 追加模式下的BigQuery加载数据与配置单元分区一起失败,google-bigquery,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 .. 我想将此数据加载到具有以上配置单元分区字段的现有Bigquery表中。现有的BQ表还包含date和val列,它们在路径中被引用为配置单元分

我的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
..
我想将此数据加载到具有以上配置单元分区字段的现有Bigquery表中。现有的BQ表还包含date和val列,它们在路径中被引用为配置单元分区

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"))
作业配置能够检测配置单元分区的列,如日期和值。但作业失败,错误为日期列已存在

然而,若我尝试在新表中加载数据,这段代码可以工作,并且还能够添加配置单元分区列。它仅在追加到现有表时失败

详细错误消息

google.api_core.exceptions.BadRequest:400读取数据时出错,错误消息:未能将分区键日期(type:type_date)添加到架构,因为已存在另一个同名列。这是不允许的。完整分区架构:[日期:TYPE\u日期,val:TYPE\u INT64]


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

一旦您创建了一个表,您是否能够将数据附加到新创建的数据中,或者您是否会收到相同的错误?@Albertalbsa附加到现有表失败,如果表不存在,它将正常工作。我的意思是,一旦您创建了一个新表,然后,您是否能够将数据附加到您创建的表中(使用此代码)@Albertalbsa NoI已经能够通过以下方式将新数据附加到您的代码中:[1:创建_table->运行代码更改'job_config.write_disposition=bigquery.WriteDisposition.write_APPEND'为'job_config.create_disposition=bigquery.CreateDisposition.create_IF_need'2:更新表->按原样运行代码]我首先创建了表(1),然后向存储桶中添加了更多数据,然后更新了表(2)。观察到的行为是,更新后的表格包含以前的数据、以前的数据(重复)和我添加的新数据。