舊版 SQL 中的資料表修飾符

本文件詳細說明如何以舊版 SQL 查詢語法來使用資料表修飾符。BigQuery 偏好的查詢語法是標準 SQL。標準 SQL 目前不支援資料表修飾符,但您可以在 _TABLE_SUFFIX 虛擬資料欄中使用篩選器,就能在標準 SQL 中實現資料表修飾符語意。詳情請參閱標準 SQL 遷移指南中的資料表修飾符與萬用字元函式一節。

通常,BigQuery 會在執行查詢時進行完整資料欄掃描。您可以在舊版 SQL 中,使用資料表修飾符執行更符合成本效益的資料子集查詢。無論何時讀取資料表都可以使用資料表修飾符,例如複製資料表、匯出資料表或使用 tabledata.list 列出資料時。

資料表修飾符支援相對和絕對 <time> 值。相對值由負數表示,絕對值由正數表示。例如,-3600000 表示相對於目前時間的一小時之前 (毫秒數);3600000 表示 1970/1/1 之後的一小時 (毫秒數)。

快照修飾符

語法

@<time>
  • <time> 的資料表快照,以紀元後毫秒為單位。
  • <time> 必須是最近 7 天內,且大於或等於資料表的建立時間。
  • @0 是特殊情況,指過去 7 天內資料表的最舊快照;如果資料表存在時間少於 7 天,則指資料表的建立時間。

您可以使用快照修飾符取消刪除資料表,但僅限於 2 天內刪除的資料表。

範例

如要取得一小時前的資料表快照:

相對值範例

#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> 必須在最近 7 天內。
  • <time2> 是選用項目,預設為「現在」。

範例

相對值範例

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

#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]
    
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
需要協助嗎?請前往我們的支援網頁