この記事では、結果のアクセス制御を含め、Databricks SQL で具体化されたビューを構成する方法について説明します。 ほとんどの構成は、 CREATE OR REPLACE MATERIALIZED VIEW ステートメントを使用して具体化されたビューを作成するとき、または作成後に ALTER TABLE ステートメントを使用して作成するときに実行できます。
具体化されたビューについて説明する
具体化されたビューの列とデータ型を取得するには、 DESCRIBE ステートメントを使用します。 具体化されたビューの列、データ型、および所有者、場所、作成時刻、更新状態などのメタデータを取得するには、 DESCRIBE EXTENDEDを使用します。
DESCRIBEステートメントを送信するには、Azure Databricks UI、Databricks SQL CLI、または Databricks SQL API の SQL エディターを使用します。
カタログ エクスプローラーを使用して具体化されたビューに関する詳細情報を取得する
カタログ エクスプローラー を使用して、具体化されたビューに関する詳細を表示することもできます。
- [
サイドバーのカタログ。
- 左側のカタログ エクスプローラー ツリーで、カタログを開き、具体化されたビューがあるスキーマを選択します。
- 選択したスキーマの テーブル 項目を開き、具体化されたビューをクリックします。
ここから、具体化されたビュー名の下にあるタブを使用して、マテリアライズド ビューに関する次のような情報を表示および編集できます。
- 更新の状態とスケジュール
- 更新の履歴と各更新の詳細ログについては、パイプラインの詳細を参照してください。 [概要] タブで [更新の詳細を表示] をクリックして、パイプラインの詳細を表示します。
- テーブル スキーマ
- サンプル データ (アクティブなコンピューティングが必要)
- 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;
-- 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は失敗するか、実行されません。
次の例では、SELECT から read_only_user 権限を取り消します。
REVOKE SELECT ON mv_name FROM read_only_user;
具体化されたビューの所有者を変更する
Databricks SQL で定義された具体化されたビューに対する MANAGE 権限を持つユーザーは、カタログ エクスプローラーを使用して新しい所有者を設定できます。 新しい所有者は、自身またはサービス プリンシパル ユーザー ロールを持つ サービス プリンシパル にすることができます。
Azure Databricks ワークスペースで、[データ] アイコンをクリック
カタログ エクスプローラーを開きます。
更新する具体化されたビューを選択します。
右側のサイドバーの [ この具体化されたビューについて] で、[ 所有者] を見つけて、[
をクリックします。編集します。
注
パイプライン設定で [ Run as user] \(実行ユーザーとして実行\) を変更して所有者を更新するように指示するメッセージが表示された場合、具体化されたビューは Databricks SQL ではなく Lakeflow Spark 宣言パイプラインで定義されます。 メッセージには、パイプライン設定へのリンクが含まれています。ここで、[ ユーザーとして実行 ] を変更できます。
具体化されたビューの新しい所有者を選択します。
所有者は、所有する具体化されたビューに対する
MANAGEおよびSELECT権限を自動的に持っています。 所有するマテリアライズド ビューの所有者としてサービス プリンシパルを設定していて、具体化されたビューに対するSELECTまたはMANAGE権限を明示的に持っていない場合、この変更により、具体化されたビューへのすべてのアクセス権が失われます。 この場合、これらの特権を明示的に指定するように求められます。[管理の権限を付与]と[SELECTの権限を付与]の両方を選択して「保存」にその権限を与えます。
[ 保存] を クリックして所有者を変更します。
具体化されたビューの所有者が更新されました。 今後のすべての更新は、新しい所有者の ID を使用して実行されます。
所有者がソース テーブルに対する権限を失った場合
所有者を変更しても、新しい所有者がソース テーブルにアクセスできない場合 (または、基になるソース テーブルに対する SELECT 権限が取り消された場合)、ユーザーはマテリアライズド ビューに対してクエリを実行できます。 しかし:
- 具体化されたビューを
REFRESHすることはできません。 - 具体化されたビューの次回のスケジュールされた更新は失敗します。
ソース データへのアクセスを失っても更新はできなくなりますが、既存の具体化されたビューが読み取られるのをすぐに無効にすることはできません。
ランタイム チャネルを設定する
SQL ウェアハウスを使用して作成された具体化されたビューは、パイプラインを使用して自動的に更新されます。 パイプラインでは、既定で current チャネルのランタイムが使用されます。 リリース プロセスについては、 Lakeflow Spark 宣言パイプラインのリリース ノートとリリース アップグレード プロセス を参照してください。
Databricks では、運用ワークロードに current チャネルを使用することをお勧めします。 新機能は、最初に preview チャネルにリリースされます。 テーブル プロパティとして 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');