舊版 SQL 功能適用情形
本文說明 BigQuery 舊版 SQL 的可用性即將受到限制。這些限制是根據評估期間的使用情況而定,並於 2026 年 6 月 1 日後生效。這些異動是 BigQuery 從舊版 SQL 轉換為 GoogleSQL 的一部分。GoogleSQL 是 BigQuery 建議使用的 ANSI 標準相容語法。
與舊版 SQL 相比,遷移至 GoogleSQL 可享有下列優點:
- 使用 BigQuery 進階執行階段可提升效能,且更具成本效益。
- 您可以使用舊版 SQL 不支援的功能,例如 DML 和 DDL 陳述式、通用資料表運算式 (CTE)、複雜的子查詢和聯結述詞、具體化檢視區塊、搜尋索引,以及生成式 AI 函式。
功能支援情形
BigQuery 會在評估期間監控舊版 SQL 功能的使用情形。對於在 2025 年 11 月 1 日至 2026 年 6 月 1 日期間未使用舊版 SQL 的機構和專案,評估期結束後將無法再使用舊版 SQL。在評估期間使用舊版 SQL 的機構和專案,可以繼續使用特定舊版 SQL 功能集執行查詢。
系統會彙整機構層級的功能用量。如果機構中的任何專案使用某項功能,該機構中的所有其他專案都能繼續使用這項功能。如果專案未與機構建立關聯,功能可用性會在專案層級進行管理。
舊版 SQL 功能集
舊版 SQL 功能分為三組功能:基本語言功能、擴充語言功能和函式分組。以下各節將詳細說明各組中的功能。
基本語言功能
這些功能是舊版 SQL 的核心,在評估期間,只要機構或獨立專案執行至少一項舊版 SQL 查詢,即可使用整套功能。
| 類別 | 功能 |
|---|---|
| 查詢語法 |
|
| 運算式邏輯 | 字面值:
邏輯運算子:
比較函式:
控制流程陳述式:
|
| 基本操作 | 算術運算子:
基本匯總函式:
|
| 資料元素 | 基本資料類型:
支援的結構化和部分支援資料類型:
轉換函式:
強制轉換:包含所有自動資料類型強制轉換。 |
擴大語言支援
這個類別包含基本集合以外的特定舊版 SQL 功能。與基本功能或功能分組不同,這個類別中的每項功能都會個別追蹤。您必須在評估期間明確使用各項功能,才能繼續使用。
| 類別 | 功能 |
|---|---|
| 擴充功能 |
函式分組
內建函式會依相關類別分類。在評估期間,只要在分組中使用任何單一函式,該分組中的所有函式都會開放使用。
| 函式分組 | 函式 |
|---|---|
| 進階視窗函式 |
|
| 統計資料的匯總函式 |
|
| 傳回重複欄位的匯總函式 |
|
| 使用位元運算的匯總函式 |
|
| 使用串連的匯總函式 |
|
| 使用排序的匯總函式 |
|
| 基本窗型函式 |
|
| 位元函式 |
|
| 條件運算式 |
|
| 轉換函式 |
|
| 目前時間函式 |
|
| 目前使用者函式 |
|
| 日期和時間函式 |
|
| RAND 函式 |
|
| 傳回重複欄位的函式 |
|
| 雜湊函式 |
|
| IP 函式 |
|
| JSON 函式 |
|
| 數學函式 |
|
| 數學雙曲函式 |
|
| TIMESTAMP 函式的一部分 |
|
| 規則運算式函式 |
|
| 字串函式 |
|
| 網址函式 |
|
| UNIX 時間戳記函式 |
|
功能適用情況示例
以下範例說明功能可用情形。
示例:存取基本語言功能
專案在評估期間執行舊版 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
評估期結束後,機構可以執行下列查詢:由於第一個查詢保留了數學函式功能,因此查詢可以正常運作。保留時間與使用的特定資料表、資料欄名稱或資料類型無關,因為 INTEGER 和 FLOAT 都是基本語言功能的一部分。
#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,請參閱遷移指南。