舊版 SQL 中的資料表修飾符
一般來說,BigQuery 在執行查詢時會執行完整資料欄掃描。您可以在舊版 SQL 中使用資料表裝飾器,以更符合成本效益的方式查詢資料子集。只要讀取資料表,就能使用資料表裝飾器,例如複製資料表、匯出資料表,或使用 tabledata.list 列出資料。
表格修飾符支援相對和絕對 <time> 值。相對值由負數表示,絕對值由正數表示。例如,-3600000 表示相對於目前時間,一小時前的時間 (以毫秒為單位);3600000 表示 1970 年 1 月 1 日後一小時的時間 (以毫秒為單位)。
時間修飾符
時間修飾符 (舊稱「快照修飾符」) 會參照資料表在某個時間點的歷來資料。
語法
@<time>
- 參照
<time>的資料表歷來資料,以 Epoch 時間起算的毫秒為單位。 <time>必須在過去七天內,且大於或等於資料表的建立時間,但小於資料表的刪除或到期時間。@0是特殊案例,會參照資料表可用的最舊資料。
時間修飾符也可用於舊版 SQL 以外。您可以在 bq cp 指令中使用這些 ID,在資料表刪除後的七天內還原已刪除的資料表。
範例
如要取得一小時前的資料表歷來資料,請執行下列指令:
相對值範例
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]
絕對值範例
取得一小時前的
<time>:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)然後在下列查詢中替換
<time>:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
範圍修飾符
語法
@<time1>-<time2>
<time1>到<time2>之間新增的參考資料表資料,以 Unix 紀元起算,單位為毫秒。<time1>和<time2>必須在過去七天內。<time2>為選用,預設值為「now」。
範例
相對值範例
如要取得前一小時和前半小時間新增的資料表資料:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]
如要取得前 10 分鐘的資料:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]
絕對值範例
如要取得前一小時和前半小時間新增的資料表資料:
取得一小時前的
<time1>:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)取得半小時前的
<time2>:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)在下列查詢中,替換
<time1>和<time2>:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]