管理具體化檢視表
本文件說明如何在 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 身分與存取權管理 (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
:要變更的物化檢視表名稱
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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 權限。
下列每個預先定義的 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
:包含實體化檢視表的資料集名稱
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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 權限。
以下每個預先定義的 IAM 角色都包含刪除唯讀檢視畫面所需的權限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如要進一步瞭解 BigQuery 身分與存取權管理 (IAM),請參閱「預先定義的角色和權限」一文。
SQL
如要刪除具體化檢視表,請使用 DROP MATERIALIZED VIEW
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;
請依指示取代下列項目:
PROJECT
:包含實體化檢視表的專案名稱DATASET
:包含實體化檢視表的資料集名稱MATERIALIZED_VIEW
:要刪除的物化檢視表名稱
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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 ...
對於現有的實體化檢視畫面,您可以使用 ALTER MATERIALIZED VIEW
修改 enable_refresh
值。
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
設定展示頻率上限
您可以設定自動重新整理的頻率上限。根據預設,materialized view 的更新頻率不會超過每 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 天。
您隨時可以手動重新整理具體化檢視表,且時間點不受展示頻率上限限制。
盡力
系統會盡力執行自動重新整理作業。BigQuery 會在基礎資料表發生變更後的 5 分鐘內嘗試開始重新整理 (如果上次重新整理是在 30 分鐘前完成),但無法保證會在該時間開始重新整理,也無法保證何時會完成。
自動重新整理的處理方式與使用 batch 優先順序的查詢類似。如果實體化檢視畫面的專案目前沒有足夠的容量,則會延遲重新整理。如果專案包含許多需要大量重新整理的檢視畫面,每個個別檢視畫面可能會相對於其基礎資料表出現明顯的延遲。
手動重新整理
您隨時可以手動重新整理已實體化的檢視畫面。
所需權限
如要手動重新整理具體化檢視表,您必須具備 bigquery.tables.getData
、bigquery.tables.update
和 bigquery.tables.updateData
IAM 權限。
下列每個預先定義的 IAM 角色都包含手動重新整理已實例化檢視區塊所需的權限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如要進一步瞭解 BigQuery 身分與存取權管理 (IAM),請參閱「預先定義的角色和權限」一文。
如要更新具體化檢視表中的資料,請呼叫 BQ.REFRESH_MATERIALIZED_VIEW
系統程序。呼叫此程序時,BigQuery 會找出基礎資料表中發生的變更,並將這些變更套用至物化檢視畫面。重新整理完成後,要執行的查詢 BQ.REFRESH_MATERIALIZED_VIEW
就會結束。
CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');
監控具體化檢視表
您可以使用 BigQuery API 取得具體化檢視表和具體化檢視表重新整理工作相關資訊。詳情請參閱「監控已實體化的檢視畫面」。