![](/img/trans.png)
[英]How to Insert a partition into BigQuery's fetch time partitioned table in Python by specifying a partition
[英]BIGQUERY - UNPARTITIONED partition in an integer range partitioned table
我尝试将数据写入我的整数范围分区表中,我将这篇文章用作参考。 其实我的表有两列:customer_id(INT)和product_name(STRING),所以我用customer_id作为字段来分区。 另一方面,我读过的文章说:
对于流式传输,流式缓冲区中的数据位于 UNPARTITIONED 分区中。 提取数据时,它最初保留在 UNPARTITIONED 分区中。 当有足够的未分区数据时,它会被重新分区到特定的分区中。
当有足够的未分区数据时这句话真的让我感到困惑,因为我不知道在这种情况下有多少数据行是“足够的”,比如 5000 行还是 10000 行?。 请问我们有机会知道吗?
在我的演示中,一开始,我的表是空的,所以我将 4000 行(这 4000 行的相同 customer_id )流式传输到我的表中,我一直等到我的数据超出流缓冲区(实际上我一直等到流缓冲区统计信息消失)在我的表的详细信息中),然后,我使用此查询来了解我有多少个分区:
#legacySQL
select table_id, partition_id
from [mydataset.customer_product$__PARTITIONS_SUMMARY__]
结果是:
|---------------------|------------------|
| table_id | partition_id |
|---------------------|------------------|
| customer_product |__UNPARTITIONED__ |
|---------------------|------------------|
那请问是什么问题?
此外,如果我覆盖我的表,通过下面的这个查询和查询设置的一些设置,
-- change some settings in Query settings to overwrite the table
select *
from mydataset.customer_product
我会得到:(19265786 是 4000 个数据行的 customer_id)
|---------------------|------------------|
| table_id | partition_id |
|---------------------|------------------|
| customer_product | 19265786 |
|---------------------|------------------|
所以我有一个很好的分区,但我不知道为什么? 各位大侠能不能给我解释一下这个问题?
我正在添加一些信息,希望能帮助您解决您的疑虑:
1. 像 5000 行还是 10000 行? 请问我们有机会知道吗?
根据Checking for data availability ,缓冲区是基于时间而不是基于大小的,数据可能需要长达 90 分钟才能可用。 此外,UNPARTITIONED 分区将包含与流缓冲区相关的所有数据; 所以,查询这个分区可以是知道缓冲区中有多少行的方法。
2. ...我一直等到我的数据用完流缓冲区(实际上我一直等到流缓冲区统计信息在我的表的详细信息中消失) 那么问题出在哪里?
可能存在同步问题,但我想知道您是如何确定流为空的。 Doc说需要“检查名为streamingBuffer的部分的tables.get响应”。 此外,streamingBuffer.oldestEntryTime 字段可用于标识流缓冲区中行的年龄。 如果服务尚未将数据提取到最终分区,则 UNPARTITIONED 分区存在是正确的。
3. 一个分区是好的,但我不知道为什么,好吗? 各位大侠能不能给我解释一下这个问题?
我同意张华的看法,当你在流式传输时,数据被缓冲在未分区的分区中,这就是为什么你只有那个分区(一段时间后,最多 90 分钟,数据将被传送到正确的分区)。 但是,当您将数据直接加载到表中时,行会立即发送到正确的分区 (19265786)。
您可能对BigQuery 流式插入的生活一文感兴趣,以阅读有关流式和分区表的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.