2013-08-27 56 views
0

我有一組類似於「Partitioning by date?」的分片數據,但有些日子沒有數據,因此沒有日期。一個理想的解決方案是使所有表(日期)可選。那可能嗎?如何在BigQuery查詢中選擇表格

詳細信息:如果您執行選擇,然後是序列[main.2013-08-01],[main.2013-08-02],...每個表必須存在。如果這些表中的任何一個不存在,bigquery在嘗試執行查詢時會返回500錯誤。通過使用術語「可選」,我希望能夠允許任何特定表不存在的語法,但查詢仍然對其他表執行。我期待的一個例子:或許查詢說SELECT * from?[main.2013-08-01],?[main.2013-08-02],...但是[main.2013-08-02 ] 不存在。 Howevever,因爲它有「?」在它被認爲是可選的並且查詢仍然執行成功之前的指示符,並且我得到的結果,儘管僅來自[main.2013-08-01]和任何其他實際存在的表。

我目前正在解決這個問題,首先做一個數據集的表列表的請求,然後與我實際想要查詢存在和合並表的碎片進行比較(例如,我希望8月的所有日子,bigquery告訴我那7/27不存在,所以我的FROM塊將包含除7/27之外的所有數據碎片的列表),但是這種方法很複雜並且涉及兩次大的查詢往返行程,所以它看起來並不理想。

+1

我不確定我是否明白你的意思是讓表格成爲可選項。 –

+0

我編輯了更多的細節,希望清除它的問題! – OverclockedTim

回答

0

作爲一種解決方法,您是否嘗試過使用空表?

比方說main.2013-08-01存在,main.2013-08-02沒有。您可以:

SELECT * FROM [main.2013-08-01] WHERE any_column = 'non existing value' 

該查詢將返回0個結果,並且您可以選擇main.2013-08-02作爲目標表。這將創建一個空表,與main.2013-08-01具有相同的列。那麼你可以加入而不關心空虛!

+0

謝謝,我懷疑這會作爲解決方法,但只有當我事先知道哪些表丟失了。爲了找到哪些表丟失了,我將不得不按照我現有的數據集表列表查詢對所有可能的月份日期進行操作,然後在其上添加額外的步驟以執行您建議的查詢,然後執行我的最終查詢我實際用來處理數據。所以在這種特殊情況下,這種方法實際上比我目前使用的解決方法要慢。 – OverclockedTim