是否支持将流数据放入列分区的BigQuery表中?我遇到了麻烦,收到了这个错误:
BadRequest:400 POST https://www.googleapis.com/bigquery/v2/projects/ ... $ 20180410 / insertAll:流式传输到基于列的分区表的元数据分区... $ 20180410是不允许的。
阅读BigQuery streaming documentation它表示允许流式传输到分区表,但所有示例都是针对摄取时分区的。我没有看到对较新的基于列的分区的引用。
是否支持,我只是做错了? 例如,当我显式添加分区后缀($ YYYYMMDD)时发生错误。当我不使用后缀时,写入成功,但它实际上看起来并没有被分割。
这是我的示例代码:
我们有一个包含几列的表格,让我们这样说:
date: DATE (partitioned field)
name: STRING
count: INTEGER
我试图通过以下方式进行流式插入:
from google.cloud import bigquery
data = [
{'date': date('2018-04-10'), 'name': 'x', 'count': 10},
{'date': date('2018-04-10'), 'name': 'y', 'count': 5},
]
client = bigquery.Client(...)
table_ref = client.dataset(dataset).table(tableid + '$20180410')
schema = client.get_table(table_ref).schema
# Raises the 400 Bad Request above.
result = client.insert_rows(table_ref, data, selected_fields=schema)
答案 0 :(得分:2)
更新/解决(帽子小姐,感谢雷辰。请参阅评论以供讨论)
要流入分区表,请不要在tableid上附加$ YYYMMDD。 BigQuery会为你做分区,但是......它似乎是一个单独的阶段。我的记录在几分钟内从流缓冲区出现在表中,但需要几个小时才能正确分区。
当您使用摄取时间分区并且可以查询_PARTITION伪列时,这更容易分辨。对于列分区,我没有找到一个好方法来了解它是否已经分区而不是bq rm-ing分区并查看记录是否消失。