BigQuery 中的 SQL 簡介
本文將概述 BigQuery 支援的陳述式和 SQL 方言。
GoogleSQL 是符合 ANSI 標準的結構化查詢語言 (SQL),支援下列類型的陳述式:
- 查詢陳述式 (也稱為資料查詢語言 (DQL) 陳述式) 是在 BigQuery 中分析資料的主要方法。這類陳述式會掃描一或多個資料表或運算式,然後傳回運算的結果資料列。查詢陳述式可以包含管道語法。
- 程序語言陳述式是 GoogleSQL 的程序擴充功能,可讓您在單一要求中執行多個 SQL 陳述式。程序陳述式可以使用變數和控制流程陳述式,並可能產生副作用。
資料定義語言 (DDL) 陳述式可讓您建立及修改物件,例如:
- 資料集
- 資料表,包括結構定義和資料欄類型
- 資料表本機副本和快照
- 瀏覽次數
- 函式
- 索引
- 容量承諾、預留項目和指派作業
- 資料列層級存取權政策
資料操縱語言 (DML) 陳述式可讓您在 BigQuery 資料表中更新、插入及刪除資料。
資料控管語言 (DCL) 陳述式可讓您控管 BigQuery 系統資源,例如存取權和容量。
交易控制語言 (TCL) 陳述式 可讓您管理資料修改的交易。
BigQuery SQL 語法
BigQuery 支援 GoogleSQL 方言,但也有舊版 SQL 方言。如果您剛開始使用 BigQuery,建議使用 GoogleSQL,因為這項語言支援最廣泛的功能。舉例來說,DDL 和 DML 陳述式等功能僅支援使用 GoogleSQL。舊版 SQL 僅用於維持回溯相容性,如果客戶使用舊版 SQL,建議migrate。
變更為使用非預設方言
您用來查詢資料的介面會決定哪一種查詢方言為預設方言。如要切換至其他方言,請執行下列操作:
控制台
Google Cloud 控制台的預設方言是 GoogleSQL。如要將方言變更為舊版 SQL,請執行下列操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中,依序點選「更多」>「查詢設定」按鈕。
在「Advanced options」(進階選項) 部分的「SQL dialect」(SQL 方言) 中,點選「Legacy」(舊版),然後按一下「Save」(儲存)。這將為此查詢設定舊版 SQL 選項。按一下「add_box」add_boxSQL 查詢來建立新查詢時,必須再次選取舊版 SQL 選項。
SQL
預設的 SQL 方言是 GoogleSQL。
如要設定 SQL 方言,請在查詢中加入 #standardSQL 或 #legacySQL 前置字串。這些查詢前置字串不區分大小寫,必須位於查詢之前,且必須以換行字元與查詢分隔。以下範例會將方言設為舊版 SQL,並查詢 natality 資料集:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
#legacySQL SELECT weight_pounds, state, year, gestation_weeks FROM [bigquery-public-data:samples.natality] ORDER BY weight_pounds DESC LIMIT 10;
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
bq 指令列工具中的預設查詢方言為舊版 SQL。如要切換成 GoogleSQL 方言,請在指令列陳述式中加入 --use_legacy_sql=false 或 --nouse_legacy_sql 旗標。
切換至 GoogleSQL 方言
如要在查詢工作中使用 GoogleSQL 語法,請將 use_legacy_sql 參數設為 false。
bq query \
--use_legacy_sql=false \
'SELECT
word
FROM
`bigquery-public-data.samples.shakespeare`'
將 GoogleSQL 設為預設方言
如要將指令列工具和互動殼層的預設方言設為 GoogleSQL,您可以編輯指令列工具的設定檔:.bigqueryrc。
如要進一步瞭解 .bigqueryrc,請參閱設定指令專屬旗標預設值的相關說明。
如要在 .bigqueryrc 中設定 --use_legacy_sql=false,請執行下列操作:
- 在文字編輯器中開啟
.bigqueryrc。根據預設,.bigqueryrc應位於您的使用者目錄中,例如$HOME/.bigqueryrc。 在檔案中加入以下文字。本範例會將查詢和
mk指令 (用於建立檢視表) 的預設語法設為 GoogleSQL。如果您已為query或mk指令旗標設定了預設值,則不必重新加入[query]或[mk]。[query] --use_legacy_sql=false [mk] --use_legacy_sql=false儲存並關閉檔案。
如果您使用的是互動殼層,則必須退出並重新啟動殼層,變更才會生效。
如要瞭解可用的指令列旗標,請參閱 bq 指令列工具參考資料。
C#
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 C# 設定操作說明進行操作。詳情請參閱 BigQuery C# API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C# 程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 UseLegacySql 參數設為 true。
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Go 設定操作說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go 用戶端程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將查詢設定中的 UseLegacySQL 屬性設為 true。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
根據預設,Java 用戶端程式庫會使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 useLegacySql 參數設為 true。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定操作說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js 用戶端程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 useLegacySql 參數設為 true。
PHP
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 PHP 設定操作說明進行操作。詳情請參閱 BigQuery PHP API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP 用戶端程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 useLegacySql 參數設為 true。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python 用戶端程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 use_legacy_sql 參數設為 True。
Ruby
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Ruby 設定操作說明進行操作。詳情請參閱 BigQuery Ruby API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby 用戶端程式庫預設使用 GoogleSQL。切換至舊版 SQL 方言
如要在查詢工作中使用舊版 SQL 語法,請將 legacy_sql: true 選項連同查詢一併傳遞。
後續步驟
- 如要瞭解如何在 BigQuery 中執行 SQL 查詢,請參閱執行互動式和批次查詢工作。
- 如要進一步瞭解查詢最佳化,請參閱「最佳化查詢效能簡介」。
- 如要瞭解用於查詢 BigQuery 資料的 GoogleSQL 語法,請參閱「查詢語法」。
- 如要進一步瞭解如何在查詢中使用管道語法,請參閱管道語法。