【发布时间】:2021-02-23 05:34:12
【问题描述】:
我有一个 Bigquery 数据传输作业设置到按月分区的目标表。该表已使用以下命令创建:
bq mk --table \
--schema schema.json \
--time_partitioning_field createdAt \
--time_partitioning_type MONTH \
myproject:mydataset.MyTable
已使用 Python BQDTS 客户端创建了数据传输作业,如下所示:
parent = f"projects/myproject/locations/{location}"
baseparams = {
"file_format": "CSV",
"ignore_unknown_values": True,
"field_delimiter": ",",
"skip_leading_rows": "0",
"allow_jagged_rows": True,
}
params = Struct()
params_content = baseparams.copy()
params_content[
"data_path_template"
] = f"gs://mybucket/**/*.csv"
params_content["destination_table_name_template"] = "MyTable"
params.update(params_content)
tc_dict = {
"display_name": target_display_name,
"destination_dataset_id": "mydataset",
"data_source_id": "google_cloud_storage",
"schedule": "every 24 hours",
"params": params,
}
tc = bigquery_datatransfer_v1.types.TransferConfig(**tc_dict)
response = client.create_transfer_config(
request={"parent": parent, "transfer_config": tc}
)
如您所见,作业定义中没有指定分区,仅在数据库表中指定,应该按照documentation:
分区选项 Cloud Storage 和 Amazon S3 传输可以写入分区或非分区目标表。 BigQuery 中有两种类型的表分区:
分区表:基于列分区的表。列类型必须是 TIMESTAMP 或 DATE 列。 如果目标表按列分区,则在创建目标表并指定其架构时标识分区列。
此作业已经成功运行了几天,直到上周(最后一次成功运行于 2020 年 11 月 4 日)。今晚(2020-11-10),作业失败并显示以下错误消息:
不兼容的表分区规范。目标表存在分区规范interval(type:MONTH,field:createdAt),但传输目标分区规范是interval(type:DAY,field:createdAt)。请在更新目标表或传输分区规范后重试。
我尝试使用这种规范重新创建表和作业,但每次目标表分区类型为 MONTH 时它确实会失败。但是,如果分区类型是 DAY,这仍然有效。最让我困惑的是“传输分区规范”作为这样一个参数的消息,它似乎在文档中不存在。
这是 GCP 中最近发生的 API 重大变化,尚未记录在案吗?
【问题讨论】:
-
我建议您在GCP issue tracker 提出问题,因为这似乎不是正常行为
-
我做到了,GCP 支持团队正在努力解决这个问题。我会在解决这个问题时更新它
-
以下是来自 Google 支持的回复:“关于“不兼容的分区”错误,BigQuery 工程团队已经发现了这个问题,他们正在努力修复。该团队估计此修复可能会在12 月的第一周结束。”
标签: google-cloud-platform google-bigquery google-cloud-storage