一對夫婦的有關TABLE_QUERY功能問題:如何在BigQuery中使用TABLE_QUERY()函數?
- 的例子顯示在查詢字符串中使用
table_id
,是否有其他方式可用? - 這似乎很難調試。當我嘗試使用它時,出現「評估子查詢時出錯」。
TABLE_QUERY()
如何工作?
一對夫婦的有關TABLE_QUERY功能問題:如何在BigQuery中使用TABLE_QUERY()函數?
table_id
,是否有其他方式可用?TABLE_QUERY()
如何工作?TABLE_QUERY()
函數允許您編寫SQL WHERE
子句,該子句經過評估以查找要運行查詢的表。例如,你可以運行下面的查詢數在publicdata:samples
數據集是7天以上的所有表中的行:
SELECT count(*)
FROM TABLE_QUERY(publicdata:samples,
"MSEC_TO_TIMESTAMP(creation_time) < "
+ "DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY')")
或者你可以運行此查詢過那些在「混帳」的所有表名字(這是github_timeline
和github_nested
示例表),並找到最常見的網址:
SELECT url, COUNT(*)
FROM TABLE_QUERY(publicdata:samples, "table_id CONTAINS 'git'")
GROUP EACH BY url
ORDER BY url DESC
LIMIT 100
儘管是非常強大的,TABLE_QUERY()
可能很難使用。 WHERE
子句必須指定爲一個字符串,這可能有點尷尬。此外,調試可能很難,因爲出現問題時,您只會收到錯誤「錯誤評估子查詢」,這並不總是有幫助的。
工作原理:
TABLE_QUERY()
基本上執行兩個查詢。當您運行TABLE_QUERY(<dataset>, <table_query>)
時,BigQuery執行SELECT table_id FROM <dataset>.__TABLES_SUMMARY__ WHERE <table_query>
以獲取表ID的列表以運行查詢,然後執行對這些表的實際查詢。
該查詢的__TABLES__
部分可能看起來不熟悉。 __TABLES_SUMMARY__
是一個元數據表,其中包含有關數據集中表的信息。你可以自己使用這個元表。例如,查詢SELECT * FROM publicdata:samples.__TABLES_SUMMARY__
將返回關於publicdata:samples
數據集中的表的元數據。
可用字段:
的__TABLES_SUMMARY__
元表(即都在TABLE_QUERY
查詢可用)的領域包括:
table_id
:表的名稱。creation_time
:自1970年1月1日UTC以來的時間(以毫秒爲單位)創建表。這與表格中的creation_time
字段相同。type
:無論是視圖(2)還是常規表格(1)。以下字段不提供TABLE_QUERY()
因爲它們的__TABLES__
成員,但不是__TABLES_SUMMARY__
。他們要在這裏保存歷史的興趣,並部分地記錄了__TABLES__
元表:
last_modified_time
:時間,以毫秒爲單位自1/1/1970 UTC,該表被更新(或元數據或內容表)。請注意,如果您使用tabledata.insertAll()
將記錄流式傳輸到表格,這可能會過時幾分鐘。row_count
:表中的行數。size_bytes
:表格的總字節數。如何調試
爲了調試TABLE_QUERY()
查詢,你可以做到這一點的BigQuery做同樣的事情;也就是說,您可以自己運行metatable查詢。例如:
SELECT * FROM publicdata:samples.__TABLES_SUMMARY__
WHERE MSEC_TO_TIMESTAMP(creation_time) <
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY')
您不僅可以調試您的查詢,但也看到,當您運行TABLE_QUERY
函數將返回哪些表。一旦你對內部查詢進行了調試,你就可以將這些查詢放在這些表上。
可以將'TABLE_QUERY's以任何方式連接起來嗎?我已經嘗試過''''和'JOIN',但在查詢中的這一點上都不可接受。看起來他們應該是',' - 可以,不是? – woodardj
是的,你可以連接它們,。你可能需要包裝在一個子選擇中,如'SELECT * FROM(SELECT * FROM TABLE_QUERY(...)),(SELECT * FROM TABLE_QUERY(...))' –
嗨喬丹。如果project_id包含「 - 」連字符,則TABLE_QUERY失敗。例如project-data:dataset_id。這是有問題的。有什麼建議麼? – cgnorthcutt
備選答案,對於那些移動着標準SQL:
例如,爲了獲得2010年和2014年間全球平均NOAA GSOD溫度:
#standardSQL
SELECT AVG(temp) avg_temp, _TABLE_SUFFIX y
FROM `bigquery-public-data.noaa.gsod_20*` #every year that starts with "20"
WHERE _TABLE_SUFFIX BETWEEN "10" AND "14" #only years between 2010 and 2014
GROUP BY y
ORDER BY y
不斷增加,例如Q&作爲未來過。他們都是偉大的。 Google在BQ團隊工作。 – Pentium10