メインコンテンツまでスキップ

スタンドアロン マテリアライズドビューの設定

CREATE OR REPLACE MATERIALIZED VIEW でマテリアライズドビューを作成するとき、または作成後に ALTER TABLE で、結果へのアクセス制御を含むスタンドアロンマテリアライズドビューを構成します。

マテリアライズドビューの説明​

マテリアライズドビューのカラムとデータ型を取得するには、 DESCRIBE ステートメントを使用します。マテリアライズドビューの列、データ型、および所有者、場所、作成時刻、更新ステータスなどのメタデータを取得するには、 DESCRIBE EXTENDED を使用します。DESCRIBEステートメントを送信するには、Databricks UI、Databricks SQL CLI、または Databricks SQL API の SQL エディターを使用します。

カタログエクスプローラでマテリアライズドビューの詳細情報を取得する​

代わりに、 カタログエクスプローラ を使用してマテリアライズドビューの詳細を表示することもできます。

  1. サイドバーのデータアイコン。 カタログ をクリックします。
  2. 左側のカタログエクスプローラーツリーでカタログを開き、マテリアライズドビューが配置されているスキーマを選択します。
  3. 選択したスキーマの下にある テーブル アイテムを開き、[マテリアライズドビュー] をクリックします。

ここでは、マテリアライズドビュー名の下のtabを使用して、以下を含むマテリアライズドビューに関する情報を表示および編集できます。

  • 更新ステータスとスケジュール
  • パイプラインの詳細を参照して、更新の履歴と各更新の詳細なログを確認してください。 概要 tabの [ 更新の詳細を表示 ] をクリックして、パイプラインの詳細を表示します。
  • テーブルスキーマ
  • サンプル データ (アクティブなコンピュートが必要)
  • 権限
  • このマテリアライズドビューが依存しているテーブルやパイプラインを含むリネージ
  • 使用状況に関する知見
  • このマテリアライズドビューに対して作成したモニター

カタログエクスプローラーでは利用できないテーブルのプロパティがいくつかあります。これらのプロパティについて、またはプログラムで情報を取得するには、 DESCRIBE EXTENDED コマンドを使用できます。

マテリアライズドビューの定義を更新する​

マテリアライズドビューを指定するクエリーは、その定義です。マテリアライズドビューの定義を変更するには、クエリーを編集するか、同じビュー名で新しい CREATE OR REPLACE MATERIALIZED VIEW クエリーを作成して実行します。完全更新はマテリアライズドビューを更新するために実行され、それ以降の更新では新しい定義が使用されます。

マテリアライズドビューへのアクセスを制御する​

マテリアライズドビューは、豊富なアクセス制御をサポートして、潜在的にプライベートなデータを公開しないようにしながら、データ共有をサポートします。 マテリアライズド・ビューの所有者または MANAGE 権限を持つユーザーは、他のユーザーに SELECT 権限を付与できます。 マテリアライズドビューへの SELECT アクセス権を持つユーザは、マテリアライズドビューが参照するテーブルへのアクセス権 SELECT 必要はありません。 このアクセス制御により、基になるデータへのアクセスを制御しながら、データを共有できます。

マテリアライズドビューの所有者を変更することもできます。

マテリアライズドビューへの権限の付与​

マテリアライズドビューへのアクセス権を付与するには、 GRANT文を使用します。

SQL
GRANT <privilege_type> ON <mv_name> TO <principal>;

privilege_typeは次のいずれかになります。

  • SELECT - ユーザーはマテリアライズドビューをSELECTできます。
  • REFRESH - ユーザーはマテリアライズドビューを REFRESH できます。更新は、所有者の権限を使用して実行されます。

次の例では、マテリアライズドビューを作成し、ユーザーに SELECT および 更新 権限を付与します。

SQL
CREATE MATERIALIZED VIEW mv_name AS SELECT * FROM source_table;

-- Grant read-only access:
GRANT SELECT ON mv_name TO read_only_user;

-- Grant read and refresh access:
GRANT SELECT ON mv_name TO refresh_user;
GRANT REFRESH ON mv_name TO refresh_user;

マテリアライズドビューの権限の剥奪​

マテリアライズドビューのアクセス権を取り消すには、 REVOKEステートメントを使用します:

SQL
REVOKE privilege_type ON <mv_name> FROM principal;

ソース テーブルに対する SELECT 権限がマテリアライズドビューの所有者またはマテリアライズドビューに対する MANAGE または SELECT 権限を付与されている他のユーザーから取り消された場合、あるいはソース テーブルが削除された場合でも、マテリアライズドビューの所有者またはアクセス権を付与されたユーザーはマテリアライズドビューに対してクエリーを実行できます。ただし、次の動作が発生します。

  • マテリアライズドビューの所有者またはマテリアライズドビューへのアクセスを失った他のユーザーは、そのマテリアライズドビューを REFRESH できなくなり、マテリアライズドビューは古くなります。
  • スケジュールで自動化されている場合、次回のスケジュールされたREFRESHは失敗するか、実行されません。

次の例では、read_only_userからSELECT権限を取り消します:

SQL
REVOKE SELECT ON mv_name FROM read_only_user;

マテリアライズドビューの所有者を変更する​

スタンドアロン マテリアライズドビューに対して MANAGE の権限を持つユーザーは、カタログ エクスプローラーで新しい所有者を設定できます。新しい所有者は、ジョブ自体、または Service Principal ユーザー ロールを持つService Principalにすることができます。

  1. Databricks ワークスペースから、データアイコン。 カタログ をクリックしてカタログ エクスプローラーを開きます。

  2. 更新するマテリアライズドビューを選択します。

  3. 右側のサイドバーの このマテリアライズドビューについて で、 所有者 を見つけて、鉛筆アイコン。編集をクリックします。

注記

パイプライン設定で ラン ユーザー を変更して所有者を更新するように求めるメッセージが表示された場合、マテリアライズドビューはスタンドアロンテーブルとしてではなく、LakeFlow Pipelines で定義されています。メッセージにはパイプライン設定へのリンクが含まれており、そこで ラン ユーザー を変更できます。

  1. マテリアライズドビューの新しい所有者を選択します。

    所有者は、自身が所有するマテリアライズドビューに対する MANAGE 権限と SELECT 権限を自動的に持っています。自身が所有するマテリアライズドビューの所有者としてService Principalを設定する場合に、そのマテリアライズドビューに対する SELECT 権限または MANAGE 権限を明示的に持っていないと、この変更によりマテリアライズドビューへのすべてのアクセス権が失われることになります。この場合、これらの権限を明示的に付与するようプロンプトが表示されます。

    [ 管理権限の付与 ]と[ SELECT権限の付与 ]の両方を選択して、[ 保存 ]でそれらを提供します。

  2. [保存] をクリックして所有者を変更します。

マテリアライズドビューの所有者が更新されます。将来のすべての更新は、新しい所有者のIDを使用して実行されます。

所有者がソース テーブルに対する権限を失った場合​

所有者を変更し、新しい所有者がソーステーブルにアクセスできない場合(または基になるソーステーブルの SELECT 権限が取り消された場合)でも、ユーザーはマテリアライズドビューをクエリーできます。ただし、次の点に注意してください。

  • マテリアライズドビューを REFRESH することはできません。
  • マテリアライズドビューの次回のスケジュールされた更新が失敗します。

ソースデータへのアクセス権を失うと更新は行われませんが、既存のマテリアライズドビューの読み取りが直ちに無効になるわけではありません。

ランタイムバージョン​

マテリアライズドビューは、常に最新のDatabricks SQLランタイムバージョンで実行されます。以前にpreviewまたはcurrentランタイムチャンネルを選択するために使用されていたpipelines.channelテーブルプロパティは、サポートされなくなり、効果はありません。既存の定義にこのプロパティが含まれている場合、それは安全に無視されるため、削除する必要はありません。