我的 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存在一些问题,如果我错了,请纠正我。
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |