Python BIGQUERY-整数范围分区表中的未分区分区

Python BIGQUERY-整数范围分区表中的未分区分区,python,sql,google-bigquery,Python,Sql,Google Bigquery,我试图将数据写入我的整数范围分区表,并将其用作引用。事实上,我的表有两列:customer\u id(INT)和product\u name(STRING),所以我使用customer\u id作为分区字段。另一方面,我读过的文章说: 对于流,流缓冲区中的数据位于未分区的分区中。提取数据时,它最初停留在未分区的分区中。当有足够的未分区数据时,它将被重新分区到特定的分区中。 当有足够多的未分区数据时,这句话真的让我困惑,因为我不知道在这个上下文中有多少数据行是“足够”,比如5000行还是10000

我试图将数据写入我的整数范围分区表,并将其用作引用。事实上,我的表有两列:customer\u id(INT)和product\u name(STRING),所以我使用customer\u id作为分区字段。另一方面,我读过的文章说:

对于流,流缓冲区中的数据位于未分区的分区中。提取数据时,它最初停留在未分区的分区中。当有足够的未分区数据时,它将被重新分区到特定的分区中。

当有足够多的未分区数据时,这句话真的让我困惑,因为我不知道在这个上下文中有多少数据行是“足够”,比如5000行还是10000行?。我们有机会知道吗

在我的演示中,开始时,我的表是空的,所以我将4000行(这4000行的相同客户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个数据行的客户id)


所以我有一个很好的分区,但我不知道为什么,拜托?你们能给我解释一下这个问题吗?

我正在添加一些信息,希望能帮助你们解决你们的问题:

一,。像5000行还是10000行?我们有机会知道吗

基于,缓冲区是基于时间的,而不是基于大小的,数据可能需要90分钟才能可用。此外,未分区的分区将包含与流缓冲区关联的所有数据;因此,查询这个分区可以知道缓冲区中有多少行

2。。。我一直等到我的数据超出流缓冲区(实际上,我一直等到流缓冲区统计数据在我的表的详细信息中消失),那么问题出在哪里

可能存在同步问题,但我想知道您是如何确定流是空的。Doc说需要“检查表。获取名为streamingBuffer的部分的响应”。此外,streamingBuffer.oldesentrytime字段可用于标识流式缓冲区中的行年龄。如果服务没有将数据提取到最终分区,则未分区的分区是正确的

三,。一个隔板很好,但我不知道为什么,请?你们能给我解释一下这个问题吗

我同意Hua Zhang的观点,当您进行流式传输时,数据被缓冲在未分区的分区中,这就是为什么您只有一个分区(经过一段时间,最多90分钟,数据将被传送到适当的分区)。但是,当您将数据直接加载到表中时,行会立即发送到适当的分区(19265786)


您可能对这篇文章感兴趣,可以阅读更多关于流和分区表的内容。

通过查询写入分区表的数据在查询内部分区。未分区分区仅用于流式传输。所有4000行都具有相同的客户id,因此它们最终位于一个分区中。谢谢@rsantiago,我非常感谢您的回答。首先,现在我了解了流式数据和直接将数据加载到表之间的区别。另一方面,我使用了检查流媒体是否为空。我一直等到streamingBuffer和odestEntryTIme字段发出json响应。然后,我重新检查了分区,但仍然得到了未分区的分区。我真的不确定,就像你说的,这是否是同步问题。你能同时共享未分区和19265786分区中的数据吗?我的怀疑是,当数据从Unparationed提取到19265786时,有一小段时间Unparationed仍然存在(在数据加载到新分区期间,此过程不是实时的,因此可能需要几分钟)Hi@rsantigo,有趣的是,在等待2天后,即使当
mydataset.customer\u product$\u PARTITIONS\u SUMMARY\u
Get me\u结果未分区时,我也可以访问
mydataset.customer\u product$19265786
中提供完整数据的数据?现在我不知道为什么:)。是的,两天后你应该能够访问相关分区中的数据。将保留以存储任何进一步的流数据,但也可以为空。如果我的理解不正确,那么用您观察到的行为更新问题是值得的。您好@rsantigo,经过7天的等待,现在一切都好了,
mydataset.customer\u product$\u PARTITIONS\u SUMMARY\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
请准确地告诉我数据的分区(192。所以我想我们实际上没有任何问题,我们唯一需要做的就是等待,因为最终一切都会好起来:D
|---------------------|------------------|
|      table_id       |   partition_id   |
|---------------------|------------------|
|  customer_product   |     19265786     |
|---------------------|------------------|