管理具體化檢視表
本文說明如何在 BigQuery 中管理具體化檢視表。
BigQuery 具體化檢視表管理作業包括:
如要進一步瞭解具體化檢視區塊,請參閱下列資源:
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文各項工作所需的權限。執行工作所需的權限 (如有) 會列在工作「必要權限」部分。
修改具體化檢視表
您可以透過 Google Cloud 主控台或 bq 指令列工具,使用資料定義語言 (DDL) 和 ALTER MATERIALIZED
VIEW
和 SET OPTIONS
變更具體化檢視區塊。如需具體化檢視表選項清單,請參閱 materialized_view_set_options_list
。
以下範例顯示如何將 enable_refresh
設為 true
。視用途需求調整。
所需權限
如要變更具體化檢視表,您需要 bigquery.tables.get
和 bigquery.tables.update
IAM 權限。
下列每個預先定義的 IAM 角色都包含變更具體化檢視區塊所需的權限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如要進一步瞭解 BigQuery Identity and Access Management (IAM),請參閱預先定義的角色和權限。
SQL
如要變更具體化檢視表,請使用 ALTER MATERIALIZED VIEW SET OPTIONS
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
取代下列項目:
PROJECT
:包含具體化檢視區塊的專案名稱DATASET
:包含具體化檢視區塊的資料集名稱MATERIALIZED_VIEW
:要變更的具體化檢視名稱
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
執行 bq update
指令:
bq update \ --enable_refresh=true \ --refresh_interval_ms= \ PROJECT.DATASET.MATERIALIZED_VIEW
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
列出具體化檢視表
您可以透過 Google Cloud 主控台、bq 指令列工具或 BigQuery API 列出具體化檢視區塊。
所需權限
如要列出資料集中的具體化檢視表,您需要 bigquery.tables.list
身分與存取權管理權限。
下列每個預先定義的 IAM 角色都包含在資料集中列出具體化檢視區塊所需的權限:
roles/bigquery.user
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
如要進一步瞭解 IAM 中的 IAM 角色和權限,請參閱預先定義的角色和權限。
列出具體化檢視區的程序與列出資料表的程序相同。如要列出資料集中的具體化檢視表:
主控台
在「Explorer」面板中展開專案並選取資料集。
捲動清單來檢視該資料集中的資料表。資料表、檢視表和具體化檢視表會分別以不同的圖示呈現。
bq
請發出 bq ls
指令。--format
旗標可用來控制輸出內容。如要列出非預設專案中的具體化檢視表,請使用下列格式將專案 ID 新增至資料集:project_id:dataset
。
bq ls --format=pretty project_id:dataset
其中:
- project_id 是您的專案 ID。
- dataset 是資料集名稱。
執行指令時,Type
欄位會顯示資料表類型。
例如:
+-------------------------+--------------------+----------------------+-------------------+ | tableId | Type | Labels | Time Partitioning | +-------------------------+--------------------+----------------------+-------------------+ | mytable | TABLE | department:shipping | | | mymatview | MATERIALIZED_VIEW | | | +-------------------------+--------------------+----------------------+-------------------+
範例:
輸入下列指令,列出預設專案中 mydataset
資料集的具體化檢視表。
bq ls --format=pretty mydataset
輸入下列指令,列出 myotherproject
中資料集 mydataset
的具體化檢視區塊。
bq ls --format=pretty myotherproject:mydataset
API
如要使用 API 列出具體化檢視表,請呼叫 tables.list
方法。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
取得具體化檢視表的相關資訊
您可以使用 SQL、bq 指令列工具或 BigQuery API,取得具體化檢視區塊的相關資訊。
所需權限
如要查詢具體化檢視區塊的相關資訊,您必須具備下列身分與存取權管理 (IAM) 權限:
bigquery.tables.get
bigquery.tables.list
bigquery.routines.get
bigquery.routines.list
下列每個預先定義的 IAM 角色都包含上述權限:
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.admin
如要進一步瞭解 BigQuery 權限,請參閱「使用身分與存取權管理功能控管存取權」一文。
如要取得具體化檢視表的相關資訊,包括任何依附的具體化檢視表副本,請按照下列步驟操作:
SQL
如要取得具體化檢視表的相關資訊,請查詢 INFORMATION_SCHEMA.TABLES
檢視表:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES WHERE table_type = 'MATERIALIZED VIEW';
取代下列項目:
PROJECT_ID
:包含具體化檢視區塊的專案名稱DATASET_ID
:包含具體化檢視區塊的資料集名稱
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq show
指令:
bq show --project=project_id --format=prettyjson dataset.materialized_view
更改下列內容:
- project_id:專案 ID。如要取得預設專案以外的專案具體化檢視表相關資訊,您只需要加入這個旗標。
- dataset:包含具體化檢視區塊的資料集名稱。
- materialized_view:您要取得資訊的具體化檢視區塊名稱。
範例:
輸入下列指令,顯示 myproject
專案中 report_views
資料集的具體化檢視表 my_mv
相關資訊。
bq show --project=myproject --format=prettyjson report_views.my_mv
API
如要使用 API 取得具體化檢視表資訊,請呼叫 tables.get
方法。
刪除具體化檢視表
您可以透過 Google Cloud 主控台、bq 指令列工具或 API 刪除具體化檢視區塊。
刪除具體化檢視表時,系統也會一併刪除與該檢視表相關聯的權限。重新建立已刪除的具體化檢視區塊時,您也必須手動重新設定先前與該檢視區塊相關聯的存取權。
所需權限
如要刪除具體化檢視,您需要 bigquery.tables.delete
身分與存取權管理權限。
下列每個預先定義的 IAM 角色都包含刪除具體化檢視區塊所需的權限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如要進一步瞭解 BigQuery Identity and Access Management (IAM),請參閱預先定義的角色和權限。
SQL
如要刪除具體化檢視表,請使用 DROP MATERIALIZED VIEW
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;
取代下列項目:
PROJECT
:包含具體化檢視區塊的專案名稱DATASET
:包含具體化檢視區塊的資料集名稱MATERIALIZED_VIEW
:要刪除的具體化檢視區塊名稱
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq rm
指令刪除具體化檢視區塊。
API
呼叫 tables.delete
方法,並為 projectId
、datasetId
和 tableId
參數指定值:
- 將
projectId
參數指派給專案 ID。 - 將
datasetId
參數指派給資料集 ID。 - 將
tableId
參數指派給要刪除的具體化檢視表資料表 ID。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
重新整理具體化檢視表
重新整理具體化檢視區塊會更新檢視區塊的快取資料,以反映基礎資料表的目前狀態。
查詢具體化檢視表時,BigQuery 會傳回快取具體化檢視表資料和從基本資料表擷取的資料。如果可以,BigQuery 只會讀取上次重新整理檢視畫面後發生的變更。重新整理具體化檢視表時,系統可能不會納入最近串流的資料,但無論是否使用具體化檢視表,查詢一律會讀取串流資料。
直接從主資料表傳回查詢結果,比從快取具體化檢視表資料傳回結果,需要更高的運算成本。定期重新整理具體化檢視區塊的快取資料,可減少直接從基本資料表傳回的資料量,進而降低運算費用。
本節說明如何執行下列操作:
自動重新整理
你隨時可以啟用或停用自動重新整理功能。自動重新整理工作是由 bigquery-adminbot@system.gserviceaccount.com
服務帳戶執行,並會顯示在具體化檢視專案的工作記錄中。
根據預設,具體化檢視中的快取資料會在基本資料表變更後 5 到 30 分鐘內,自動從基本資料表重新整理,例如插入或刪除資料列。
您可以設定重新整理頻率上限,管理快取資料的自動重新整理頻率,進而管理具體化檢視區塊的費用和查詢效能。
啟用及停用自動重新整理
如要在建立具體化檢視表時關閉自動重新整理功能,請將 enable_refresh
設為 false
。
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW PARTITION BY RANGE_BUCKET(column_name, buckets) OPTIONS (enable_refresh = false) AS SELECT ...
如要修改現有實體化檢視區塊的 enable_refresh
值,請使用 ALTER MATERIALIZED VIEW
。
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
設定展示頻率上限
您可以設定自動重新整理的頻率上限。根據預設,具體化檢視區塊的重新整理頻率不會超過每 30 分鐘一次。
您隨時可以變更重新整理頻率上限。
如要在建立具體化檢視表時設定重新整理頻率上限,請在 DDL 中將 refresh_interval_minutes
(或在 API 和 bq 指令列工具中將 refresh_interval_ms
) 設為所需值。
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW OPTIONS (enable_refresh = true, refresh_interval_minutes = 60) AS SELECT ...
同樣地,您也可以在修改具體化檢視區塊時設定展示頻率上限。 這個範例假設您已啟用自動重新整理功能,現在只想變更展示頻率上限:
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (refresh_interval_minutes = 60);
重新整理頻率上限下限為 1 分鐘。重新整理頻率上限最多為 7 天。
您可以隨時手動重新整理具體化檢視表,且時間不受頻率上限限制。
盡可能提供最佳服務
系統會盡力自動重新整理。 如果基礎資料表在 30 分鐘內發生變更,BigQuery 會嘗試在 5 分鐘內開始重新整理,但無法保證會在該時間開始重新整理,也無法保證何時會完成。
自動重新整理的處理方式與批次優先順序的查詢類似。如果具體化檢視區塊的專案目前沒有容量,系統會延後重新整理。如果專案包含許多重新整理成本很高的檢視區塊,每個檢視區塊相對於其基本資料表,可能會大幅延遲。
手動重新整理
您隨時可以手動重新整理具體化檢視區塊。
所需權限
如要手動重新整理具體化檢視表,您需要 bigquery.tables.getData
、bigquery.tables.update
和 bigquery.tables.updateData
IAM 權限。
下列每個預先定義的 IAM 角色都包含手動重新整理具體化檢視區塊所需的權限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如要進一步瞭解 BigQuery Identity and Access Management (IAM),請參閱預先定義的角色和權限。
如要更新具體化檢視表中的資料,請呼叫 BQ.REFRESH_MATERIALIZED_VIEW
系統程序。呼叫這個程序時,BigQuery 會找出基礎資料表中的變更,並將這些變更套用至具體化檢視區塊。重新整理完成後,要執行的查詢就會結束。BQ.REFRESH_MATERIALIZED_VIEW
CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');
監控具體化檢視表
您可以使用 BigQuery API 取得具體化檢視表和具體化檢視表重新整理工作的相關資訊。詳情請參閱「監控具體化檢視區塊」。