マテリアライズド ビューを管理する
このドキュメントでは、BigQuery でマテリアライズド ビューを管理する方法について説明します。
マテリアライズド ビューの BigQuery での管理には、次のオペレーションが含まれます。
マテリアライズド ビューの詳細については、以下をご覧ください。
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの「必要な権限」セクションに記載されています。
マテリアライズド ビューを変更する
マテリアライズド ビューは、Google Cloud コンソールまたは bq コマンドライン ツールから、ALTER MATERIALIZED
VIEW
と SET OPTIONS
を指定してデータ定義言語(DDL)を使用することで変更できます。マテリアライズド ビュー オプションの一覧については、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 権限が必要です。
次の IAM 事前定義ロールには、データセット内のマテリアライズド ビューを一覧表示するために必要な権限が含まれています。
roles/bigquery.user
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
IAM での IAM ロールと権限については、事前定義ロールと権限をご覧ください。
テリアライズド ビューを一覧表示するプロセスは、テーブルを一覧表示するプロセスと同じです。データセット内のテリアライズド ビューを一覧表示するには、次の手順を行います。
コンソール
[エクスプローラ] パネルでプロジェクトを展開し、データセットを選択します。
リストをスクロールして、データセット内のテーブルを表示します。テーブル、ビュー、マテリアライズド ビューは、別々のアイコンで区別できます。
bq
bq ls
コマンドを発行します。--format
フラグを使用して出力を制御できます。デフォルト プロジェクト以外のプロジェクトにあるマテリアライズド ビューを一覧表示する場合は、project_id:dataset
の形式でプロジェクト ID をデータセットに追加します。
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 を使用します。
必要な権限
マテリアライズド ビューに関する情報をクエリするには、次の Identity and Access Management(IAM)権限が必要です。
bigquery.tables.get
bigquery.tables.list
bigquery.routines.get
bigquery.routines.list
次の各 IAM 事前定義ロールには、上の権限が含まれています。
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.admin
BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。
マテリアライズド ビューに関する情報(依存するマテリアライズド ビューのレプリカを含む)を取得するには:
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 権限が必要です。
次の 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 ...
既存のマテリアライズド ビューの場合は、ALTER MATERIALIZED VIEW
を使用して enable_refresh
値を変更できます。
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 日間です。
マテリアライズド ビューは、いつでも手動で更新できます。手動更新のタイミングは、フリークエンシー キャップによらず自由に選択できます。
ベスト エフォート
自動更新はベスト エフォート ベースで行われます。BigQuery では、ベーステーブルの変更後 5 分以内に更新の開始が試行されます(前回の更新が 30 分以上前に行われた場合)。しかし、更新がその時点で開始されることや、いつ更新が完了するかが保証されるわけではありません。
自動更新は、バッチ優先度でのクエリの実行と同様に処理されます。マテリアライズド ビューのプロジェクトに現時点でその容量がない場合、更新が遅延します。プロジェクトに更新の費用が高いビューが多く含まれる場合、個々のビューはベーステーブルと比較してかなり遅くなる可能性があります。
手動更新
実体化されたビューはいつでも手動で更新できます。
必要な権限
マテリアライズド ビューを手動で更新するには、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 を使用して取得できます。 詳細については、マテリアライズド ビューのモニタリングをご覧ください。