建立邏輯檢視畫面
本文說明如何在 BigQuery 中建立邏輯檢視表。
您可以透過下列方式建立邏輯檢視畫面:
- 使用 Google Cloud 控制台。
- 使用 bq 指令列工具的
bq mk
指令。 - 呼叫
tables.insert
API 方法 - 使用用戶端程式庫。
- 提交
CREATE VIEW
資料定義語言 (DDL) 陳述式。
資料檢視限制
BigQuery 資料檢視有下列幾項限制:
- 檢視畫面為唯讀狀態。舉例來說,您無法執行插入、更新或刪除資料的查詢。
- 包含檢視表的資料集,以及包含檢視表參照之資料表的資料集,必須位於同一個位置。
- 檢視表內的參照必須符合資料集資格。預設資料集不會影響檢視區塊主體。
- 您無法使用
TableDataList
JSON API 方法從檢視表擷取資料。詳情請參閱 Tabledata:list 的相關說明。 - 使用檢視表時,不能混用 GoogleSQL 和舊版 SQL 查詢。GoogleSQL 查詢無法參照使用舊版 SQL 語法定義的檢視表。
- 您無法在檢視表中參照查詢參數。
- 建立檢視表時,系統會將基礎資料表的結構定義和檢視表一併儲存。如果在檢視表建立後新增、刪除或修改資料欄,檢視表不會自動更新,且回報的結構定義會維持不正確,直到變更檢視表 SQL 定義或重新建立檢視表為止。不過即使回報的結構定義不正確,所有提交的查詢還是會產生正確的結果。
- 您無法將舊版 SQL 檢視表自動更新為 GoogleSQL 語法。如要修改用來定義檢視表的查詢,可以使用下列項目:
- Google Cloud 控制台中的「編輯查詢」選項
- bq 指令列工具中的
bq update --view
指令 - BigQuery 用戶端程式庫
- update 或 patch API 方法。
- 您無法在定義檢視表的 SQL 查詢中加入暫時性使用者定義函式或暫時性資料表。
- 您無法在萬用字元資料表查詢中參照資料檢視。
如要瞭解檢視表適用的配額及限制,請參閱檢視表限制一節。
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者擁有執行本文件各項工作所需的權限。
所需權限
BigQuery 會將檢視表視為資料表資源,因此建立檢視表需要的權限和建立資料表相同。您還需擁有檢視表 SQL 查詢所參照的資料表查詢權限。
如要建立資料檢視,您需要 bigquery.tables.create
IAM 權限。roles/bigquery.dataEditor
這個預先定義的 IAM 角色具備建立檢視區塊所需的權限。
此外,如果您具備 bigquery.datasets.create
權限,可以在您建立的資料集中建立檢視區塊。如要為不屬於您的資料建立檢視區塊,您必須具備該資料表的 bigquery.tables.getData
權限。
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱預先定義的角色和權限。
檢視表命名
在 BigQuery 中建立檢視表時,檢視表名稱在同一資料集中不得重複。以下是檢視表的命名規則:
- 包含的字元總計最多 1,024 個 UTF-8 位元組。
- 包含類別 L (字母)、M (標記)、N (數字)、Pc (連接符,包括底線)、Pd (破折號)、Zs (空格) 的 Unicode 字元。詳情請參閱一般類別。
以下是有效檢視畫面名稱的範例:view 01
、ग्राहक
、00_お客様
、étudiant-01
。
注意事項:
- 根據預設,資料表名稱會區分大小寫。
mytable
和MyTable
可以共存在同一個資料集中,除非是已關閉大小寫區分功能的資料集。 - 部分檢視區塊名稱和檢視區塊名稱前置字元已保留,如果收到錯誤訊息,指出檢視區塊名稱或前置字元已保留,請選取其他名稱,然後再試一次。
如果您在序列中加入多個點運算子 (
.
),系統會自動移除重複的運算子。例如:
project_name....dataset_name..table_name
變成這樣:
project_name.dataset_name.table_name
建立檢視表
您可以撰寫用來定義檢視表可存取之資料的 SQL 查詢,藉此建立檢視表。SQL 查詢必須包含 SELECT
陳述式。
檢視區塊查詢不允許其他陳述式類型 (例如 DML 陳述式) 和多重陳述式查詢。
如何建立資料檢視:
主控台
SQL
使用 CREATE VIEW
陳述式。下列範例會從美國人名公開資料集建立名為 usa_male_names
的檢視區塊:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE VIEW mydataset.usa_male_names(name, number) AS ( SELECT name, number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = 'M' ORDER BY number DESC );
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq mk
指令並加上 --view
旗標。如果是 GoogleSQL 查詢,請加入 --use_legacy_sql
旗標,並將旗標設定為 false
。部分選用參數包括 --add_tags
、--expiration
、--description
和 --label
。如需完整參數清單,請參閱 bq mk
指令參考資料。
如果查詢參照儲存在 Cloud Storage 或本機檔案中的外部使用者定義函式 (UDF) 資源,請使用 --view_udf_resource
旗標指定這些資源。本文不示範 --view_udf_resource
旗標。如要進一步瞭解如何使用 UDF,請參閱使用者定義函式。
如果要在預設專案以外的專案中建立檢視表,請使用 --project_id
旗標來指定專案 ID。
bq mk \ --use_legacy_sql=false \ --view_udf_resource=PATH_TO_FILE \ --expiration=INTEGER \ --description="DESCRIPTION" \ --label=KEY_1:VALUE_1 \ --add_tags=KEY_2:VALUE_2[,...] \ --view='QUERY' \ --project_id=PROJECT_ID \ DATASET.VIEW
更改下列內容:
PATH_TO_FILE
是程式碼檔案的 URI 或本機檔案系統路徑,該檔案會做為檢視表使用的使用者定義函式資源,而立即載入並進行評估。請重複該標記以指定多個檔案。INTEGER
會設定檢視區塊的生命週期 (以秒為單位)。如果INTEGER
為0
,檢視畫面就不會過期。如果未加入--expiration
旗標,BigQuery 會使用資料集的預設資料表生命週期建立檢視區塊。DESCRIPTION
是資料檢視的說明,會用引號括住。KEY_1:VALUE_1
是代表標籤的鍵/值組合。重複使用--label
旗標即可指定多個標籤。KEY_2:VALUE_2
是代表標記的鍵/值組合。在同一個標記下新增多個標籤,並在鍵/值組合之間加上半形逗號。QUERY
是有效的查詢。PROJECT_ID
是您的專案 ID (若未設定預設專案)。DATASET
是專案中的資料集。VIEW
是您要建立的檢視區塊名稱。
範例:
輸入下列指令,在預設專案的 mydataset
中建立名為 myview
的檢視表。到期時間設為 3600 秒 (1 小時)、說明設為 This is my view
,標籤則設為 organization:development
。用於建立檢視區塊的查詢會查詢來自美國人名資料公開資料集的資料。
bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
輸入下列指令,在 myotherproject
中的 mydataset
建立名為 myview
的檢視表。說明設為 This is my view
、標籤設為 organization:development
,而檢視的到期時間則設為資料集的預設資料表到期時間。用於建立檢視區塊的查詢會查詢來自美國人名資料公開資料集的資料。
bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
建立檢視表後,您可以更新檢視表的到期時間、說明和標籤。詳情請參閱更新檢視表的相關說明。
Terraform
使用 google_bigquery_table
資源。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
下列範例會建立名為 myview
的檢視區塊:
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是
.tf
,例如main.tf
。在本教學課程中,這個檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。
將範例程式碼複製到新建立的
main.tf
。視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。
- 查看並修改範例參數,套用至您的環境。
- 儲存變更。
-
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
API
使用含有 view
屬性的資料表資源呼叫 tables.insert
方法。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
建立檢視表之後,便可像查詢資料表一樣查詢該檢視表。
查看安全性
如要控管 BigQuery 中檢視區塊的存取權,請參閱「授權檢視區塊」。