我的 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 …