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

Databricks SQLでマテリアライズドビューを構成する

この記事では、 Databricks SQLでマテリアライズドビューを構成する方法(結果のアクセス制御を含む)について説明します。 ほとんどの設定は、 CREATE OR REPLACE MATERIALIZED VIEW ステートメントを使用してマテリアライズドビューを作成するとき、または作成後に ALTER TABLE ステートメントを使用して行うことができます。

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

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

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

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

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

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

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

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

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

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

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

メタストア管理者とワークスペース管理者の両方である場合は、マテリアライズドビューの所有者を変更できます。 マテリアライズドビュー DLT パイプラインを自動的に作成して使用し、変更を処理します。 マテリアライズドビューの所有者を変更するには、次の手順に従います。

  • カタログエクスプローラでマテリアライズドビューを開き、[ 概要 ]タブで[ 更新の詳細を表示] をクリックします。これにより、マテリアライズドビューを管理するパイプラインのパイプライン詳細が開きます。
  • [共有 ] をクリックします。 [権限設定 ] ダイアログが表示されます。これらの設定を編集するには、メタストアおよびワークスペース管理者である必要があります。
  • 現在の所有者の名前の右側にある [x ] をクリックして、現在の所有者を削除します。
  • 入力を開始して、使用可能なユーザーのリストをフィルタリングします。新しいパイプライン所有者にするユーザーをクリックします。
  • [保存 ] をクリックして変更を保存し、ダイアログを閉じます。

パイプラインで定義されているマテリアライズドビューを含むすべてのパイプラインアセットは、新しいパイプライン所有者によって所有されます。 今後のすべての更新は、新しい所有者の ID を使用して実行されます。

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

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

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

ソース データへのアクセスを失うと、更新はできなくなりますが、既存のマテリアライズドビューが読み取られるのはすぐには無効になりません。

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

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

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

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

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

privilege_typeは次のとおりです。

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

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

SQL
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 privileges from a マテリアライズドビュー

マテリアライズドビューからのアクセスを取り消すには、 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;

ランタイム チャンネルを設定する

SQLウェアハウスを使用して作成されたマテリアライズドビューは、DLT パイプラインを使用して自動的に更新されます。DLT パイプラインは、 current チャンネル by デフォルト のランタイムを使用します。 リリースプロセスについては 、DLT リリースノートとリリースアップグレードプロセス を参照してください。

Databricks 本番運用ワークロードには current チャンネルを使用することをお勧めします。 新機能は最初に preview チャンネルにリリースされます。 プレビュー DLT チャンネルにパイプラインを設定して、 preview をテーブル プロパティとして指定することで、新機能をテストできます。 このプロパティは、テーブルを作成するとき、または ALTER ステートメントを使用してテーブルを作成した後に指定できます。

次のコード例は、CREATE ステートメントでチャンネルをプレビューに設定する方法を示しています。

SQL
CREATE OR REPLACE MATERIALIZED VIEW sales
TBLPROPERTIES ('pipelines.channel' = 'preview')
AS ...

作成後にチャンネルを変更するには、 ALTER TABLE ステートメントを使用します。

SQL
ALTER TABLE <table-name> SET TBLPROPERTIES ('pipelines.channel' = 'preview');