2014-03-25 50 views
7

今天早上關於新表通配符函數的好消息!有沒有辦法在包含日期但沒有前綴的表上使用TABLE_DATE_RANGE()?使用TABLE_DATE_RANGE()的BigQuery通配符()

我有一個數據集,其中包含名爲YYYYMMDD(無前綴)的表。通常我會查詢,像這樣:

SELECT foo 
FROM [mydata.20140319],[mydata.20140320],[mydata.20140321] 
LIMIT 100 

我嘗試以下,但我得到一個錯誤:

SELECT foo 
FROM 
    (TABLE_DATE_RANGE(mydata., 
       TIMESTAMP('2014-03-19'), 
       TIMESTAMP('2015-03-21'))) 
LIMIT 100 

還有:

SELECT foo 
FROM 
    (TABLE_DATE_RANGE(mydata, 
       TIMESTAMP('2014-03-19'), 
       TIMESTAMP('2015-03-21'))) 
LIMIT 100 
+1

你今天在哪裏閱讀這些內容? – Pentium10

+1

@ Pentium10發行說明:https://developers.google.com/bigquery/release-notes#03252014 – Rohit

+1

@通過「BigQuery宣佈」Google集團宣佈的Pentium10 - 值得訂閱:https://groups.google .com/forum /#!forum/bigquery-announce –

回答

7

這裏的基本錯誤已被修正爲2015年5月14日。您應該可以使用純數字表名稱使用TABLE_DATE_RANGE。您需要以'。'結尾數據集。並將名稱括在括號中,以便解析器不會發生抱怨。這應該工作:

SELECT foo 
FROM 
    (TABLE_DATE_RANGE([mydata.], 
       TIMESTAMP('2014-03-19'), 
       TIMESTAMP('2015-03-21'))) 
LIMIT 100 
+0

當我遵循這種方法時,出現「Timestamp evaluation:result is NaN or NULL」錯誤。 – user1965449

6

注:底層有漏洞已修復,請參閱我的其他答案。 留給後代的原始回覆(因爲解決方法應該仍然有效,以防因某種原因需要它)

很好的問題。這應該有效,但它目前不。我提交了一個內部錯誤。在此期間,一種解決方法是使用TABLE_QUERY功能,如:

SELECT foo 
FROM (
    TABLE_QUERY(mydata, 
       "TIMESTAMP(table_id) BETWEEN " 
       + "TIMESTAMP('2014-03-19') " 
       + "AND TIMESTAMP('2015-03-21')")) 
+1

每天有數據表有什麼優勢? – Pentium10

+2

很多用戶喜歡白天更容易表管理分區的數據(舊錶可以被刪除),並且它們可以運行成本較低的查詢(因爲你只需要在查詢你所需要的天數)。 –

+3

有沒有一種方法可以基於飛行或第一次插入自動創建重複模式?否則,你最終需要爲每個分區創建模式。 – Pentium10

3

需要注意的是,在BigQuery的standard SQL支持,你可以使用_TABLE_SUFFIX,而不是TABLE_QUERY。例如:

SELECT foo 
FROM `mydata_*` 
WHERE _TABLE_SUFFIX BETWEEN '20140319' AND '20150321' 

有關BigQuery標準SQL的更多信息,請查看question

+0

這個答案是輕浮的,不清楚'mydata'是數據集名稱還是表名,在這兩種情況下,它都不適用於帶有BigQuery的標準SQL。 – user1965449

+0

我正在使用'mydata',因爲這是在問題中使用的。它引用表id,並且在標準SQL中通常採用'project_id.dataset_id.table_id'格式。 –