スタンドアロンの具体化されたビューを構成する

CREATE OR REPLACE MATERIALIZED VIEWを使用して具体化されたビューを作成する場合、またはALTER TABLEを使用して作成した後に、結果のアクセス制御を含むスタンドアロンの具体化されたビューを構成します。

具体化されたビューについて説明する

具体化されたビューの列とデータ型を取得するには、 DESCRIBE ステートメントを使用します。 具体化されたビューの列、データ型、および所有者、場所、作成時刻、更新状態などのメタデータを取得するには、 DESCRIBE EXTENDEDを使用します。 DESCRIBEステートメントを送信するには、Azure Databricks UI、Databricks SQL CLI、または Databricks SQL API の SQL エディターを使用します。

カタログ エクスプローラーを使用して具体化されたビューに関する詳細情報を取得する

カタログ エクスプローラー を使用して、具体化されたビューに関する詳細を表示することもできます。

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

ここから、具体化されたビュー名の下にあるタブを使用して、マテリアライズド ビューに関する次のような情報を表示および編集できます。

  • 更新の状態とスケジュール
  • 更新の履歴と各更新の詳細ログについては、パイプラインの詳細を参照してください。 [概要] タブで [更新の詳細を表示] をクリックして、パイプラインの詳細を表示します。
  • テーブル スキーマ
  • サンプル データ (アクティブなコンピューティングが必要)
  • Permissions
  • ラインエージ(このマテリアライズドビューが依存するテーブルおよびパイプラインを含む)
  • 使用状況に関する分析情報
  • この具体化されたビュー用に作成したモニター

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

具体化されたビューの定義を更新する

具体化されたビューを指定するクエリは、その定義です。 具体化されたビューの定義を変更するには、クエリを編集するか、同じビュー名を持つ新しい CREATE または REPLACE MATERIALIZED VIEW クエリを作成して実行します。 具体化されたビューを更新するために完全な更新が実行され、さらに更新では新しい定義が使用されます。

具体化されたビューへのアクセスを制御する

具体化されたビューでは、プライベートデータの公開を回避しながら、データ共有をサポートする豊富なアクセス制御がサポートされています。 具体化されたビューの所有者または 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;

-- Grant 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 は失敗するか、実行されません。

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

REVOKE SELECT ON mv_name FROM read_only_user;

具体化されたビューの所有者を変更する

スタンドアロンの具体化されたビューに対する MANAGE アクセス許可を持つユーザーは、カタログ エクスプローラーを使用して新しい所有者を設定できます。 新しい所有者は、本人自身、またはその人物がサービス プリンシパル ユーザーのロールを保有するサービス プリンシパルにすることができます。

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

  2. 更新する具体化されたビューを選択します。

  3. 右側のサイドバーの [ この具体化されたビューについて] で、[ 所有者] を見つけて、[ 鉛筆] アイコン をクリックします。編集します。

    パイプライン設定で [ 実行 ] ユーザーを変更して所有者を更新するように指示するメッセージが表示された場合、具体化されたビューは、スタンドアロン テーブルではなく Lakeflow パイプラインで定義されます。 メッセージには、パイプライン設定へのリンクが含まれています。ここで、[ ユーザーとして実行 ] を変更できます。

  4. 具体化されたビューの新しい所有者を選択します。

    所有者は、所有する具体化されたビューに対する MANAGE および SELECT 権限を自動的に持っています。 所有するマテリアライズド ビューの所有者としてサービス プリンシパルを設定していて、具体化されたビューに対する SELECT または MANAGE 権限を明示的に持っていない場合、この変更により、具体化されたビューへのすべてのアクセス権が失われます。 この場合、これらの特権を明示的に指定するように求められます。

    [管理の権限を付与][SELECTの権限を付与]の両方を選択して「保存」にその権限を与えます

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

具体化されたビューの所有者が更新されました。 今後のすべての更新は、新しい所有者の ID を使用して実行されます。

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

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

  • 具体化されたビューを REFRESH することはできません。
  • 具体化されたビューの次のスケジュールされた更新が失敗します。

ソース データへのアクセスを失っても更新はできなくなりますが、既存の具体化されたビューが読み取られるのをすぐに無効にすることはできません。

ランタイムバージョン

マテリアル化されたビューは常に最新のDatabricks SQLランタイムバージョン上で動作します。 かつてpreviewcurrentランタイムチャネルを選択するために使われていたpipelines.channelテーブルプロパティは、現在はサポートされておらず、効果はありません。 既存の定義にこの性質が含まれている場合は、安全に無視でき、削除する必要はありません。