2017-05-17 22 views
1

我們最近有一個測試失敗,它提出了一個BigQuery的問題一致性模型:在我們創建一個表之後,其他操作是否應立即看到該表?Google BigQuery中的表一致性?

背景: 我們的測試使用一些數據在BigQuery中創建一個表,並等待作業完成,然後檢查表是否存在。

gbq.write_gbq(df, dataset_id, table_name, project_id=project_id, block=True) 
assert table_name in gbq.list_tables(dataset_id, project_id=project_id) # fails 

FYI block=True運行wait_for_job,所以對於工作等待完成。

+1

這是一個Google BigQuery後端問題,現在按照http://stackoverflow.com/questions/44053351/weird-behavior-with-from-list-tables-in-google-bigquery/44080022#44080022 – Maximilian

+0

已解決per:https://stackoverflow.com/questions/44053351/weird-behavior-with-from-list-tables-in-google-bigquery – Maximilian

回答

0

是的,表格應該在創建後立即使用。

但我懷疑這個問題不適用於BigQuery。

請注意,在docs,tables.list()操作中有這個nextPageToken參數。您可能必須使用它才能在數據集中檢索所有表格。

這個code有一個關於如何使用它的例子。基本上,當頁面令牌被定義的時候,並不是所有的表都被列出來了。

+0

巧合的是,'list_tables'正在調用'pandas-gbq'。此外,該數據集中只有5個表格,因此即使不是,也不太可能成爲問題的根源。 這可能是最終一致性問題嗎? – Maximilian

+0

嗯,我明白了。除此之外,唯一想到的是如果在'wait_job'中拋出一些異常而不是達到'DONE'狀態。你是否可以斷言工作狀態也是'完成'的? –

+0

這就是'wait_for_job'的作用:(https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2083#issuecomment-238908317 – Maximilian