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

Google cloud platform Biqquery:某些行属于不同的分区,而不是目标分区,google-cloud-platform,google-bigquery,airflow,partitioning,airflow-operator,Google Cloud Platform,Google Bigquery,Airflow,Partitioning,Airflow Operator,我正在运行一个气流DAG,它使用操作员GoogleCloudStorageToBigQueryOperator将数据从地面军事系统移动到BQ。我使用的是气流版本1.10.2 此任务将数据从MySql移动到BQ(表分区),在这段时间内,我们都是按摄取时间进行分区的,当使用DAG加载数据时,过去三天的增量负载工作正常 现在,我们将表中日期列上的分区类型更改为Date或timestamp,之后我们开始出现此错误,因为我们从MySql表中获取过去三天的增量负载数据,我希望BQ作业附加新记录,或者使用我之

我正在运行一个气流DAG,它使用操作员GoogleCloudStorageToBigQueryOperator将数据从地面军事系统移动到BQ。我使用的是气流版本1.10.2

此任务将数据从MySql移动到BQ(表分区),在这段时间内,我们都是按
摄取时间进行分区的,当使用DAG加载数据时,过去三天的增量负载工作正常

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

异常:BigQuery作业失败。最后一个错误是:{'reason':'invalid','message':'某些行属于不同的分区,而不是目标分区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表时,您应该指定。 例如

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

$ bq query --use_legacy_sql=false "CREATE TABLE tmp_elliottb.PartitionedTable (x INT64, y NUMERIC, date DATE) PARTITION BY date"
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='dataset.table$YYYYMMDD',

感谢您的回答,我发现我们的Airflow框架确实会将$YYYYMMDD值和今天的执行日期传递到目标_project_dataset_表(如果该表已分区),这就是我得到上述错误的原因,即使我有逻辑只发送该特定分区的数据,框架也会自动向目标数据集添加$YYYYMMDD。所以基本上,目标项目数据集表变量是模板化的。
destination_project_dataset_table='dataset.table$YYYYMMDD',