Biqquery:某些行属于不同的分区,而不是目标分区



我正在运行一个Airflow DAG,它使用运算符GoogleCloudStorageToBigQueryOperator将数据从GCS移动到BQ,我在Airflow版本1.10.2上。

此任务将数据从 MySql 移动到 BQ(表分区(,一直以来我们都被Ingestion-time分区,当使用 Airflow DAG 加载数据时,过去三天的增量负载工作正常。

现在我们将分区类型更改为在表中的 DATE 列上Date or timestamp,之后我们开始收到此错误,因为我们正在从 MySql 表中获取增量负载以获取过去三天的数据,我希望 BQ 作业附加新记录或使用我之前测试过的"WRITE_TRUNCATE"重新创建分区,它们都失败并显示以下错误消息。

Exception: BigQuery job failed. Final error was: {'reason': 'invalid', 'message': 'Some rows belong to different partitions rather than destination partition 20191202'}.

我将无法发布代码,因为所有模块都是基于 JSON 参数调用的,但这是我使用其他常规参数传递给此表的运算符的内容

create_disposition='CREATE_IF_NEEDED',
time_partitioning = {'field': 'entry_time', 'type': 'DAY'}
write_disposition = 'WRITE_APPEND' #Tried with 'WRITE_TRUNCATE'
schema_update_options = ('ALLOW_FIELD_ADDITION',
'ALLOW_FIELD_RELAXATION')

我相信这些是可能导致问题的字段,非常感谢对此的任何帮助。

按日期或时间戳使用 Bigquery 分区表时,应指定要加载数据的分区。 例如

table_name$20160501

此外,您的列值应与分区匹配,例如,如果您创建此表:

$ bq query --use_legacy_sql=false "CREATE TABLE tmp_elliottb.PartitionedTable (x INT64, y NUMERIC, date DATE) PARTITION BY date"

日期是分区的基于列的日期,如果您尝试加载下一行

$ echo "1,3.14,2018-11-07" > row.csv
$ bq "tmp_elliottb.PartitionedTable$20181105" ./row.csv

由于您在使用分区时正在加载2018-11-07的数据,因此会收到此错误20181107

Some rows belong to different partitions rather than destination partition 20181105

我建议使用以下destination_project_dataset_table值并验证数据是否与分区日期匹配。

destination_project_dataset_table='dataset.table$YYYYMMDD',

最新更新