流式传输到基于列的分区 Bigquery table "disallowed"?
Streaming into Column-based partitioned Bigquery table "disallowed"?
是否支持将数据流式传输到按列分区的 BigQuery table?我遇到了问题,收到此错误:
BadRequest: 400 POST https://www.googleapis.com/bigquery/v2/projects/...180410/insertAll: Streaming to metadata partition of column based partitioning table ...180410 is disallowed.
阅读 BigQuery streaming documentation 它说流式传输到分区 tables 是允许的,但所有示例都是针对摄取时间分区的。我没有看到对较新的基于列的分区的引用。
是否支持,我只是做错了?
例如,当我显式添加分区后缀($YYYYMMDD)时出现错误。当我不使用后缀时写入成功,但它看起来不像实际分区。
这是我的示例代码:
我们有一个包含几列的 table,比方说:
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 + '180410')
schema = client.get_table(table_ref).schema
# Raises the 400 Bad Request above.
result = client.insert_rows(table_ref, data, selected_fields=schema)
Updated/Solved(帽子提示,感谢 Lei Chen。讨论见评论)
要流式传输到分区 table,请不要在 tableid 上附加 $YYYMMDD。 BigQuery 将为您进行分区,但是......它似乎是一个单独的阶段。我的记录在几分钟内出现在流缓冲区的 table 中,但需要几个小时才能正确分区。
当您使用摄取时间分区并且可以查询 _PARTITION 伪列时,这更容易分辨。对于列分区,除了 bq rm-ing 分区并查看记录是否消失之外,我没有找到知道它是否已分区的好方法。
是否支持将数据流式传输到按列分区的 BigQuery table?我遇到了问题,收到此错误:
BadRequest: 400 POST https://www.googleapis.com/bigquery/v2/projects/...180410/insertAll: Streaming to metadata partition of column based partitioning table ...180410 is disallowed.
阅读 BigQuery streaming documentation 它说流式传输到分区 tables 是允许的,但所有示例都是针对摄取时间分区的。我没有看到对较新的基于列的分区的引用。
是否支持,我只是做错了? 例如,当我显式添加分区后缀($YYYYMMDD)时出现错误。当我不使用后缀时写入成功,但它看起来不像实际分区。
这是我的示例代码:
我们有一个包含几列的 table,比方说:
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 + '180410')
schema = client.get_table(table_ref).schema
# Raises the 400 Bad Request above.
result = client.insert_rows(table_ref, data, selected_fields=schema)
Updated/Solved(帽子提示,感谢 Lei Chen。讨论见评论)
要流式传输到分区 table,请不要在 tableid 上附加 $YYYMMDD。 BigQuery 将为您进行分区,但是......它似乎是一个单独的阶段。我的记录在几分钟内出现在流缓冲区的 table 中,但需要几个小时才能正确分区。
当您使用摄取时间分区并且可以查询 _PARTITION 伪列时,这更容易分辨。对于列分区,除了 bq rm-ing 分区并查看记录是否消失之外,我没有找到知道它是否已分区的好方法。