![](/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.