舊版 SQL 中的資料表修飾符

一般來說,BigQuery 會在執行查詢時執行完整資料欄掃描。您可以在舊版 SQL 中使用資料表修飾符,以更具成本效益的方式查詢部分資料。無論何時讀取資料表都可以使用資料表修飾符,例如複製資料表、匯出資料表或使用 tabledata.list 列出資料時。

表格裝飾器支援相對和絕對 <time> 值。相對值由負數表示,絕對值由正數表示。舉例來說,-3600000 表示相對於目前時間的一小時前 (以毫秒為單位);3600000 表示 1970 年 1 月 1 日後的一小時 (以毫秒為單位)。

時間裝飾器

時間裝飾符 (舊稱「快照裝飾符」) 會參照資料表在特定時間點的歷史資料。

語法

@<time>
  • 以毫秒為單位 (自 Epoch 起算),參照 <time> 的資料表歷來資料。
  • <time> 必須在過去七天內,且大於或等於資料表的建立時間,但小於資料表的刪除或到期時間。
  • @0 是指資料表可用的最舊資料,屬於特殊情況。

時間裝飾符也會用於舊版 SQL 以外的查詢。您可以在 bq cp 指令中使用這些名稱,還原刪除的資料表 (資料表刪除後七天內)。

範例

如要取得一小時前資料表的歷來資料:

相對值範例

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]

絕對值範例

  1. 取得一小時前的 <time>:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 然後,在下列查詢中取代 <time>:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
    

範圍修飾符

語法

@<time1>-<time2>
  • 在 <time1> 和 <time2> 之間新增的參照資料表資料,以紀元起算的毫秒數表示。
  • <time1> 和 <time2> 必須在過去七天內。
  • <time2> 為選用參數,預設值為「now」。

範例

相對值範例

如要取得前一小時和前半小時間新增的資料表資料:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]

如要取得前 10 分鐘的資料:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]

絕對值範例

如要取得前一小時和前半小時間新增的資料表資料:

  1. 取得一小時前的 <time1>:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 取得半小時前的 <time2>:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. 在下列查詢中,取代 <time1> 和 <time2>:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]