Databricks SQLでマテリアライズドビューを構成する
プレビュー
この機能は パブリック プレビュー段階です。
この記事では、結果のアクセス制御を含め、 Databricks SQLでマテリアライズドビューを構成する方法について説明します。 ほとんどの構成は、 CREATE OR REPLACE MATERIALIZED VIEW
ステートメントを使用してマテリアライズドビューを作成するとき、または作成後にALTER TABLE
ステートメントを使用して実行できます。
マテリアライズドビューを説明する
マテリアライズドビューの列とデータ型を取得するには、 DESCRIBE ステートメントを使用します。 マテリアライズドビューの列、データ型、所有者、場所、作成時間、更新ステータスなどのメタデータを取得するには、 DESCRIBE EXTENDED
使用します。 DESCRIBE
ステートメントを送信するには、Databricks UI の SQL エディター、 Databricks SQL CLI 、またはDatabricks SQL APIを使用します。
Catalog Explorer でマテリアライズドビューの詳細情報を取得する
カタログ エクスプローラーを使用して、マテリアライズドビューの詳細を表示することもできます。
- クリック
サイドバーの カタログ 。
- 左側のカタログ エクスプローラー ツリーでカタログを開き、マテリアライズドビューが配置されているスキーマを選択します。
- 選択したスキーマの下にある テーブル アイテムを開き、[マテリアライズドビュー] をクリックします。
ここから、マテリアライズドビュー名の下にあるタブを使用して、マテリアライズドビューに関する以下の情報を表示および編集できます。
- ステータスとスケジュールの更新
- パイプラインの詳細を参照して、更新の履歴と各更新の詳細なログを確認してください。 概要 タブの [ 更新の詳細を表示 ] をクリックして、パイプラインの詳細を表示します。
- テーブルスキーマ
- サンプルデータ (アクティブなコンピュートが必要です)
- 権限
- このマテリアライズドビューが依存するテーブルやパイプラインなどのリネージ
- 使い方を知る
- このマテリアライズドビュー用に作成したモニター
カタログ エクスプローラーでは使用できないテーブルのプロパティがいくつかあります。これらのプロパティについては、またはプログラムで情報を取得するには、 DESCRIBE EXTENDEDコマンドを使用できます。
マテリアライズドビューの定義を更新する
マテリアライズドビューを指定するクエリがその定義です。 マテリアライズドビューの定義を変更するには、クエリを編集するか、同じビュー名で新しいCREATE OR REPLACE MATERIALIZED VIEWクエリを作成して実行します。 完全な更新を実行してマテリアライズドビューを更新し、さらに新しい定義を使用して更新します。
マテリアライズドビューの所有者を変更する
メタストア管理者とワークスペース管理者の両方である場合は、マテリアライズドビューの所有者を変更できます。 マテリアライズドビュー はLakeflow 宣言型パイプラインを自動的に作成して使用し、変更を処理します。 マテリアライズドビューの所有者を変更するには、次の手順に従います。
- カタログエクスプローラでマテリアライズドビューを開き、 概要 タブで 更新の詳細を表示 をクリックします。これにより、マテリアライズドビューを管理するパイプラインのパイプライン詳細が開きます。
- 共有 をクリックします。 権限設定 ダイアログが表示されます。これらの設定を編集するには、メタストアおよびワークスペース管理者である必要があります。
- 現在の所有者の名前の右側にある x をクリックして、現在の所有者を削除します。
- 入力を開始すると、利用可能なユーザーのリストがフィルタリングされます。新しいパイプラインの所有者となるユーザーをクリックします。
- 保存 をクリックして変更を保存し、ダイアログを閉じます。
パイプラインで定義されたマテリアライズドビューを含むすべてのパイプライン資産は、新しいパイプライン所有者によって所有されます。 今後のすべての更新は、新しい所有者の ID を使用して実行されます。
所有者がソーステーブルに対する権限を失った場合
所有者を変更し、新しい所有者がソース テーブルにアクセスできない場合 (または、基礎となるソース テーブルに対するSELECT
権限が取り消された場合)、ユーザーは引き続きマテリアライズドビューをクエリできます。 しかし:
- マテリアライズドビューを
REFRESH
することはできません。 - 次にスケジュールされたマテリアライズドビューの更新は失敗します。
ソース データにアクセスできなくなると更新ができなくなりますが、既存のマテリアライズドビューの読み取りが直ちに無効になるわけではありません。
マテリアライズドビューへのアクセスを制御する
マテリアライズドビューは、豊富なアクセス制御をサポートして、潜在的にプライベートなデータを公開しないようにしながら、データ共有をサポートします。 マテリアライズド・ビューの所有者または MANAGE
権限を持つユーザーは、他のユーザーに SELECT
権限を付与できます。 マテリアライズドビューへの SELECT
アクセス権を持つユーザは、マテリアライズドビューが参照するテーブルへのアクセス権 SELECT
必要はありません。 このアクセス制御により、基になるデータへのアクセスを制御しながら、データを共有できます。
マテリアライズドビューに権限を付与する
マテリアライズドビューへのアクセスを許可するには、 GRANTステートメントを使用します。
GRANT <privilege_type> ON <mv_name> TO <principal>;
privilege_type は次のいずれかになります。
SELECT
- ユーザーはマテリアライズドビューをSELECT
できます。REFRESH
- ユーザーはマテリアライズドビューをREFRESH
できます。 更新は所有者の権限を使用して実行されます。
次の例では、マテリアライズドビューを作成し、選択権限と更新権限をユーザーに付与します。
CREATE MATERIALIZED VIEW mv_name AS SELECT * FROM source_table;
-- Grant read-only access:
GRANT SELECT ON mv_name TO read_only_user;
-- Grand read and refresh access:
GRANT SELECT ON mv_name TO refresh_user;
GRANT REFRESH ON mv_name TO refresh_user;
マテリアライズドビューの権限の剥奪
マテリアライズドビューからのアクセスを取り消すには、 REVOKEステートメントを使用します。
REVOKE privilege_type ON <mv_name> FROM principal;
ソース テーブルに対するSELECT
権限がマテリアライズドビューの所有者、またはマテリアライズドビューに対するMANAGE
またはSELECT
権限を付与されている他のユーザーから取り消された場合、またはソース テーブルが削除された場合でも、マテリアライズドビューの所有者またはアクセス権を付与されたユーザーは引き続きマテリアライズドビューをクエリできます。 ただし、次の動作が発生します。
- マテリアライズドビューの所有者またはマテリアライズドビューにアクセスできなくなった他の人は、そのマテリアライズドビューを
REFRESH
できなくなり、マテリアライズドビューは古くなります。 - スケジュールを使用して自動化されている場合、次にスケジュールされている
REFRESH
失敗するか、実行されません。
次の例では、 read_only_user
からSELECT
権限を取り消します。
REVOKE SELECT ON mv_name FROM read_only_user;
ランタイムチャンネルを設定する
SQLウェアハウスを使用して作成されたマテリアライズドビューは、パイプラインを使用して自動的に更新されます。Lakeflow 宣言型パイプラインは、 current
チャンネル by デフォルト のランタイムを使用します。 リリース プロセスの詳細については Lakeflow 宣言型パイプライン リリースノート と リリース アップグレード プロセス を参照してください。
Databricksでは本番運用ワークロードには current
チャンネルを使用することをお勧めします。 新機能は最初に preview
チャンネルにリリースされます。 プレビュー Lakeflow 宣言型パイプライン チャンネルにパイプラインを設定して、 preview
をテーブル プロパティとして指定することで新機能をテストできます。 このプロパティは、テーブルを作成するとき、または ALTER ステートメントを使用してテーブルを作成した後に指定できます。
次のコード例は、CREATE ステートメントでプレビューするチャンネルを設定する方法を示しています。
CREATE OR REPLACE MATERIALIZED VIEW sales
TBLPROPERTIES ('pipelines.channel' = 'preview')
AS ...
チャンネルの作成後に変更するには、 ALTER TABLE
ステートメントを使用します。
ALTER TABLE <table-name> SET TBLPROPERTIES ('pipelines.channel' = 'preview');