google-cloud-platform - Bigquery : Some rows belong to different partitions rather than destination partition

标签 google-cloud-platform google-bigquery partitioning airflow

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

此任务将数据从 MySql 移动到 BQ(表分区),一直以来我们都按摄取时间 进行分区,并且过去三天的增量加载在使用加载数据时工作正常 Airflow DAG。

现在,我们将表中 DATE 列的分区类型更改为“日期或时间戳”,之后我们开始收到此错误,因为我们正在获取增量加载以获取最后的数据从 MySql 表三天后,我期望 BQ 作业追加新记录或使用我之前测试过的“WRITE_TRUNCATE”重新创建分区,但两者都失败并显示以下错误消息。

异常:BigQuery 作业失败。最终错误是:{'reason': 'invalid', 'message': '某些行属于不同分区而不是目标分区 20191202'}。

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

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 按日期或时间戳分区表时,您应该指定 partition to load the data 。 例如

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

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

Some rows belong to different partitions rather than destination partition 20181105

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

destination_project_dataset_table='dataset.table$YYYYMMDD',

关于google-cloud-platform - Bigquery : Some rows belong to different partitions rather than destination partition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59182899/

相关文章:

google-bigquery - 使用 TABLE_DATE_RANGE 展平

sql - LEFT JOIN IN BigQuery 语法错误 : Expected end of input but got keyword ON at [7:1]

azure-cosmosdb - 区分 Azure Cosmos DB 中的分区键和分区键范围

python - 在运行管道之前提交 Dataflow 作业时可以运行设置脚本吗?

node.js - 具有内容长度限制的签名 URL

python - 在数据流上运行自定义模板时出现错误 'Unable to parse file'

mongodb - BigQuery 中的行级原子 MERGE REPLACE

linux - AWS EC2 中的内存分区

scala - 如何使用 Samza 在 Kafka 主题上创建分区?

ios - 为什么我的应用程序在给予谷歌 API key 限制后总是未被授权?