舊版 SQL 功能適用情形

本文說明 BigQuery 舊版 SQL 的可用性即將受到限制。這些限制是根據評估期間的使用情況而定,並於 2026 年 6 月 1 日後生效。這些異動是 BigQuery 從舊版 SQL 轉換為 GoogleSQL 的一部分。GoogleSQL 是 BigQuery 建議使用的 ANSI 標準相容語法。

與舊版 SQL 相比,遷移至 GoogleSQL 可享有下列優點:

功能支援情形

BigQuery 會在評估期間監控舊版 SQL 功能的使用情形。對於在 2025 年 11 月 1 日至 2026 年 6 月 1 日期間未使用舊版 SQL 的機構和專案,評估期結束後將無法再使用舊版 SQL。在評估期間使用舊版 SQL 的機構和專案,可以繼續使用特定舊版 SQL 功能集執行查詢。

系統會彙整機構層級的功能用量。如果機構中的任何專案使用某項功能,該機構中的所有其他專案都能繼續使用這項功能。如果專案未與機構建立關聯,功能可用性會在專案層級進行管理。

舊版 SQL 功能集

舊版 SQL 功能分為三組功能:基本語言功能、擴充語言功能和函式分組。以下各節將詳細說明各組中的功能。

基本語言功能

這些功能是舊版 SQL 的核心,在評估期間,只要機構或獨立專案執行至少一項舊版 SQL 查詢,即可使用整套功能。

類別 功能
查詢語法
  • SELECT
  • FROM
  • JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY
  • LIMIT
運算式邏輯 字面值:
  • TRUE
  • FALSE
  • NULL

邏輯運算子:
  • AND
  • OR
  • NOT

比較函式:
  • =
  • !=
  • <>
  • <
  • <=
  • >
  • >=
  • IN
  • IS NULL
  • IS NOT NULL
  • IS_EXPLICITLY_DEFINED
  • IS_INF
  • IS_NAN
  • ... BETWEEN ... AND ...

控制流程陳述式:
  • IF
  • IFNULL
  • CASE WHEN … THEN …
基本操作 算術運算子:
  • +
  • -
  • *
  • /
  • %

基本匯總函式:
  • AVG
  • COUNT
  • FIRST
  • LAST
  • MAX
  • MIN
  • NTH
  • SUM
資料元素 基本資料類型:
  • BYTES
  • BOOLEAN
  • FLOAT
  • INTEGER
  • STRING
  • TIMESTAMP

支援的結構化和部分支援資料類型:
  • 精確數值:NUMERICBIGNUMERIC
  • 民用時間:DATETIME DATETIME
  • 結構化欄位:巢狀欄位、重複欄位

轉換函式:
  • CAST(expr AS type)
  • BOOLEAN
  • BYTES
  • FLOAT
  • INTEGER
  • STRING

強制轉換:包含所有自動資料類型強制轉換。

擴大語言支援

這個類別包含基本集合以外的特定舊版 SQL 功能。與基本功能或功能分組不同,這個類別中的每項功能都會個別追蹤。您必須在評估期間明確使用各項功能,才能繼續使用。

類別 功能
擴充功能

函式分組

內建函式會依相關類別分類。在評估期間,只要在分組中使用任何單一函式,該分組中的所有函式都會開放使用。

函式分組 函式
進階視窗函式
  • CUME_DIST
  • DENSE_RANK
  • FIRST_VALUE
  • LAG
  • LAST_VALUE
  • LEAD
  • NTH_VALUE
  • NTILE
  • PERCENT_RANK
  • PERCENTILE_CONT
  • PERCENTILE_DISC
  • RANK
  • RATIO_TO_REPORT
  • ROW_NUMBER
統計資料的匯總函式
  • CORR
  • COVAR_POP
  • COVAR_SAMP
  • STDDEV
  • STDDEV_POP
  • STDDEV_SAMP
  • VARIANCE
  • VAR_POP
  • VAR_SAMP
傳回重複欄位的匯總函式
  • NEST
  • QUANTILES
  • UNIQUE
使用位元運算的匯總函式
  • BIT_AND
  • BIT_OR
  • BIT_XOR
使用串連的匯總函式
  • GROUP_CONCAT
  • GROUP_CONCAT_UNQUOTED
使用排序的匯總函式
  • COUNT([DISTINCT])
  • EXACT_COUNT_DISTINCT
  • TOP ... COUNT(*)
基本窗型函式
  • AVG
  • COUNT(*)
  • COUNT([DISTINCT])
  • MAX
  • MIN
  • STDDEV
  • SUM
位元函式
  • &
  • |
  • ^
  • <<
  • >>
  • ~
  • BIT_COUNT
條件運算式
  • COALESCE
  • EVERY
  • GREATEST
  • LEAST
  • NVL
  • SOME
轉換函式
  • FROM_BASE64
  • HEX_STRING
  • TO_BASE64
目前時間函式
  • NOW
  • CURRENT_DATE
  • CURRENT_TIME
  • CURRENT_TIMESTAMP
目前使用者函式
  • CURRENT_USER
日期和時間函式
  • DATE
  • DATE_ADD
  • DATEDIFF
  • TIME
  • TIMESTAMP
RAND 函式
  • RAND
傳回重複欄位的函式
  • POSITION
  • SPLIT
雜湊函式
  • HASH
  • SHA1
  • FARM_FINGERPRINT
IP 函式
  • FORMAT_IP
  • FORMAT_PACKED_IP
  • PARSE_IP
  • PARSE_PACKED_IP
JSON 函式
  • JSON_EXTRACT
  • JSON_EXTRACT_SCALAR
數學函式
  • ABS
  • ACOS
  • ASIN
  • ATAN
  • ATAN2
  • CEIL
  • COS
  • DEGREES
  • EXP
  • FLOOR
  • LN
  • LOG
  • LOG10
  • LOG2
  • PI
  • POW
  • RADIANS
  • ROUND
  • SIN
  • SQRT
  • TAN
數學雙曲函式
  • ACOSH
  • ASINH
  • ATANH
  • COSH
  • SINH
  • TANH
TIMESTAMP 函式的一部分
  • DAY
  • DAYOFWEEK
  • DAYOFYEAR
  • HOUR
  • MINUTE
  • MONTH
  • QUARTER
  • SECOND
  • WEEK
  • YEAR
規則運算式函式
  • REGEXP_MATCH
  • REGEXP_EXTRACT
  • REGEXP_REPLACE
字串函式
  • CONTAINS
  • CONCAT
  • INSTR
  • LEFT
  • LENGTH
  • LOWER
  • LPAD
  • LTRIM
  • REPLACE
  • RIGHT
  • RPAD
  • RTRIM
  • SUBSTR
  • UPPER
網址函式
  • HOST
  • DOMAIN
  • TLD
UNIX 時間戳記函式
  • FORMAT_UTC_USEC
  • MSEC_TO_TIMESTAMP
  • PARSE_UTC_USEC
  • SEC_TO_TIMESTAMP
  • STRFTIME_UTC_USEC
  • TIMESTAMP_TO_SEC
  • TIMESTAMP_TO_MSEC
  • TIMESTAMP_TO_USEC
  • USEC_TO_TIMESTAMP
  • UTC_USEC_TO_DAY
  • UTC_USEC_TO_HOUR
  • UTC_USEC_TO_MONTH
  • UTC_USEC_TO_WEEK
  • UTC_USEC_TO_YEAR

功能適用情況示例

以下範例說明功能可用情形。

示例:存取基本語言功能

專案在評估期間執行舊版 SQL 查詢。假設資料表 T 含有 INTEGER 類型的 X 資料欄。

#legacySQL
SELECT X FROM T

這樣一來,組織內的所有專案都能繼續執行查詢,並使用基本語言功能集中的任何功能。舉例來說,下列查詢仍可運作:

#legacySQL
SELECT X FROM T WHERE X > 10

範例:使用函式分組

專案會使用特定函式分組中的一個函式。假設資料表 T 含有 FLOAT 類型的 X 資料欄。

#legacySQL
SELECT SIN(X) FROM T

使用 SIN() 函式可存取整個數學函式群組。因此,機構中的所有專案都可以使用該分組中的任何其他函式,例如 COS()

#legacySQL
SELECT COS(X) FROM T

反之,如果機構中的任何專案都未使用統計資料分組的匯總函式,則在評估期過後,下列查詢就會失敗。

#legacySQL
SELECT STDDEV(X) FROM T

範例:不同資料表的特徵保留率

假設資料表 X 含有資料欄 A (INTEGER),而資料表 Y 含有資料欄 B (FLOAT)。專案在評估期間執行下列查詢:

#legacySQL
SELECT SIN(A) FROM X

評估期結束後,機構可以執行下列查詢:由於第一個查詢保留了數學函式功能,因此查詢可以正常運作。保留時間與使用的特定資料表、資料欄名稱或資料類型無關,因為 INTEGERFLOAT 都是基本語言功能的一部分。

#legacySQL
SELECT COS(B) FROM Y

範例:複雜查詢

假設資料表 T 包含 STRING 類型的 X 資料欄。專案會在評估期間執行下列查詢:

#legacySQL
SELECT value, AVG(FLOAT(value)) OVER (ORDER BY value) AS avg
 FROM (
  SELECT LENGTH(SPLIT(X, ',')) AS value
    FROM T
)

這項查詢會使用基本語言功能和三種函式群組的特徵:基本窗型函式、字串函式,以及傳回重複值的函式。組織內的所有專案都會保留這些功能。 因此,如果新查詢使用的函式組合與這些保留功能集不同,就會成功。

#legacySQL
SELECT value, COUNT(STRING(value)) OVER (ORDER BY value) as count
 FROM (
  SELECT CONCAT(SPLIT(X, ','), '123') AS value
    FROM T
)

常見問題

新機構可以使用舊版 SQL 嗎?

評估期結束後,新機構或專案就無法使用舊版 SQL。在特殊情況下,你可以申請豁免。如果無法存取 Google 表單,請改為傳送電子郵件至 bq-legacysql-support@google.com,並附上機構 ID、目前用量、最近一次的使用日期、遷移挑戰,以及改用 GoogleSQL 的預估時間表。

現有的舊版 SQL 查詢會停止運作嗎?

只要查詢使用的所有舊版 SQL 功能,在評估期間內至少有一個專案使用過,現有查詢就能繼續運作。如果查詢依賴這段期間未使用的功能,可能會失敗,因此建議您確保所有重要查詢都已執行。

如果現有機構使用舊版 SQL,是否能建立也使用舊版 SQL 的新專案?

可以。評估期間,貴機構中任何專案存取的所有功能,貴機構中所有新舊專案都能繼續使用。

有沒有工具可以檢查機構使用的舊版 SQL 功能?

目前沒有工具可稽核特定功能的使用情形。如要追蹤舊版 SQL 的使用情況,請查詢 INFORMATION_SCHEMA.JOBS 檢視區塊,詳情請參閱「每個專案的舊版 SQL 查詢工作計數」。您也可以在 Cloud Logging 中查看查詢記錄,檢查特定語法的使用情況。

我需要遷移到 GoogleSQL 嗎?

遷移並非必要,但我們建議您遷移。GoogleSQL 是功能齊全的現代化建議方言。

如果評估期間未執行不常使用的舊版 SQL 查詢,會發生什麼情況?

為確保查詢能繼續運作,請在評估期間執行一次查詢。如果無法在該時間執行,可以申請豁免。如果無法存取 Google 表單,請改為傳送電子郵件至 bq-legacysql-support@google.com,並附上機構 ID、目前的使用量、最近的使用日期、遷移挑戰,以及改用 GoogleSQL 的預估時間表。

後續步驟

  • 如要將查詢從舊版 SQL 遷移至 GoogleSQL,請參閱遷移指南