2016-01-13 71 views
1

我有一個包含每日表的數據集。由於包含和不包含字段的表的數據集,在表中找不到字段x

從給定的日期開始,我在這些表中生成了一個新的字段x。

現在我想用where子句使用這個新字段來查詢完整的數據集。 例子:

SELECT field1 FROM 
TABLE_DATE_RANGE_STRICT([mytable], DATE_ADD(TIMESTAMP("2016-01-11"), -7, "DAY"), TIMESTAMP("2016-01-11")) 
WHERE x != null 

不幸的是,我得到Field x not found in table mytable20160105,因爲確實這個表沒有這個領域。

會不會有一種方法,而不更新我的舊錶的結構,查詢所有這些和過濾這個領域?即對於BigQuery來說,如果字段未定義,字段應爲'null'

回答

1

假設您在2016-01-01和2016-01-04之間有一個時間模式,然後添加了額外/新的「X」字段,因爲下面類型的查詢2016年1月5日

會解決你的問題

SELECT * FROM 
    (SELECT * FROM 
    TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-05"), TIMESTAMP("2016-01-07")) 
), 
    (SELECT * FROM 
    TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-01"), TIMESTAMP("2016-01-04")), 
) 
WHERE NOT x IS NULL 

同時上述在這種情況下,particulat查詢並沒有多大意義,因爲你會知道提前第二個子查詢沒有任何結果,因此您可以使用更低的值:

SELECT * FROM 
    TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-05"), TIMESTAMP("2016-01-07") 
WHERE NOT x IS NULL 

但我希望在你的問題,例如只是簡單例子所以hopefuly第一選擇仍然是有意義的你,你可以利用它

與此同時,一週時間修補你的表與舊的模式是優選的。這是免費的,爲什麼不呢?檢查Tables Patch API

+0

謝謝,的確,我的查詢是一個簡化的。 – Steren

+0

我希望BigQuery有一個更簡單的解決方案來解決這個問題。例如一種將不存在的列視爲NULL值的方法。 – Steren

+0

您可以在此處將您的提案提交給Google小組 - https://code.google.com/p/google-bigquery/issues/list –

相關問題