2017-04-06 51 views
1

我有如下所示的大查詢表,並且想要向標記爲<=的表發出查詢。Google BigQuery:TABLE_QUERY AND TABLE_DATE_RANGE

prefix_AAAAAAA_20170320 
prefix_AAAAAAA_20170321 
prefix_AAAAAAA_20170322 <= 
prefix_AAAAAAA_20170323 <= 
prefix_AAAAAAA_20170324 <= 
prefix_AAAAAAA_20170325 
prefix_BBBBBBB_20170320 
prefix_BBBBBBB_20170321 
prefix_BBBBBBB_20170322 <= 
prefix_BBBBBBB_20170323 <= 
prefix_BBBBBBB_20170324 <= 
prefix_BBBBBBB_20170325 
prefix_CCCCCCC_20170320 
prefix_CCCCCCC_20170321 
prefix_CCCCCCC_20170322 
prefix_CCCCCCC_20170323 
prefix_CCCCCCC_20170324 
prefix_CCCCCCC_20170325 

我做了一個查詢,因爲這

SELECT * FROM 
    (TABLE_QUERY(mydataset, 
    'table_id CONTAINS "prefix" AND 
    (table_id CONTAINS "AAAAAA" OR table_id CONTAINS "BBBBBB")') 
    AND 
    TABLE_DATE_RANGE(mydataset.prefix, TIMESTAMP('2017-03-22'), TIMESTAMP('2017-03-24'))) 

我得到這個錯誤。

Error: Encountered " "AND" "AND "" at line 5, column 4. Was expecting: ")" ... 

有沒有人有想法?

回答

1

您無法將TABLE_QUERY和TABLE_DATE_RANGE混合爲完全相同的FROM!

嘗試類似下面

#legacySQL 
SELECT * 
FROM (TABLE_QUERY(mydataset, 'REGEXP_MATCH(table_id, "prefix_[AB]{7}_2017032[234]")')) 

考慮Migrating to BigQuery Standard SQL

在這種情況下,你可以Query Multiple Tables Using a Wildcard Table

How to Migrate from TABLE_QUERY() to _TABLE_SUFFIX

我認爲,在這種情況下,您的查詢可以看起來像

#standardSQL 
SELECT * 
FROM `mydataset.prefix_*` 
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, '[AB]{7}_2017032[234]') 

我不能遷移到SQL標準,因爲...
如果我想搜索例如2017年3月29日和2017年4月2日之間,你有什麼聰明的SQL

試試下面的版本

#legacySQL 
SELECT * 
FROM (TABLE_QUERY(mydataset, 
    'REGEXP_MATCH(table_id, r"prefix_[AB]{7}_(\d){8}") AND 
    RIGHT(table_id, 8) BETWEEN "20170329" AND "20170402"')) 

當然喲可以調整上述使用任何確切的邏輯喲需要申請!

+0

感謝您的回覆。我無法遷移到標準SQL,因爲我必須使用標準SQL不支持的PERCENTILE_DISC函數。如果我想在2017-03-29和2017-04-02之間搜索示例,您是否有任何智能SQL? –

+0

我想我完全回答你的原始問題。並仍然與遺留的SQL。是的,我確實有聰明的SQL爲您的下一個問題,但評論的格式不允許我把它放在這裏。請接受並投票支持這個答案,然後提出新的問題,我將很樂意再次回答 –

+0

感謝您接受。我會很快更新我的答案,與你問 –

相關問題