2015-05-03 58 views
2

我有一個使用TABLE_QUERY(),以及基於CREATION_TIME對結果進行過濾現有查詢:TABLE_QUERY失敗LAST_MODIFIED_TIME

SELECT 
    * 
FROM (TABLE_QUERY(project_114151_dataset , "MSEC_TO_TIMESTAMP(creation_time) > DATE_ADD(CURRENT_TIMESTAMP(), -45, 'DAY') AND REGEXP_MATCH(table_id, r'^fact_[0-9]{8}$') ")) 

我想改變查詢開始運行基於LAST_MODIFIED_TIME;因爲它也是毫秒的時間戳,我改變了查詢,如下所示

SELECT 
    * 
FROM (TABLE_QUERY(project_114151_dataset , "MSEC_TO_TIMESTAMP(last_modified_time) > DATE_ADD(CURRENT_TIMESTAMP(), -45, 'DAY') AND REGEXP_MATCH(table_id, r'^fact_[0-9]{8}$') ")) 

但是,運行我收到以下錯誤時:

Error: Error evaluating subsidiary query 

不知道爲什麼我得到這個錯誤;我已經驗證了這一領域通過運行下面的查詢存在,而且它的效果確實返回:

SELECT * FROM project_114151_dataset.__TABLES__ 
WHERE MSEC_TO_TIMESTAMP(creation_time) < 
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY') 

任何幫助,將不勝感激!

回答

1

TABLE_QUERY()功能唯一可用的字段有:project_iddataset_idtable_idcreation_timetype。它們是由__TABLES_SUMMARY__僞表返回的實體。 (嘗試SELECT * FROM project_114151_dataset.__TABLES_SUMMARY__)。

+0

我知道這已經改變了嗎? 我是基於我的語法在你的帖子找到這裏: http://stackoverflow.com/questions/22734777/how-do-i-use-the-table-query-function-in-bigquery 是否有可能更新文檔以及? –

+0

@GilAdirim該帖子發生了什麼變化? – Pentium10

+0

@ Pentium10在我的鏈接上,你解釋了table_query()使用了與__TABLES__相同的邏輯,其中包括last_modifed_time字段;而約旦的答案意味着該邏輯通過返回__TABLES_SUMMARY__中的數據來工作,而不是。 那麼哪個是正確的? –

1

TABLE_QUERY內部的表達式不能使用表格中的數據,它只能使用常量和自由函數(如CURRENT_TIMESTAMP)。