具体化されたレイク ビューの Spark SQL リファレンス

この記事では、Fabricでマテリアル化された湖のビューを作成、リストアップ、名前変更、削除するためのSpark SQL構文を提供します。

ヒント

最初の具体化された湖のビューを作成するには、「具体化された湖のビューを始める」を参照してください。

具体化された湖のビューを作成する

具体化された湖のビューは、任意のテーブルから、またはレイクハウス内の別の具体化された湖のビューから定義できます。

構文

CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier 
[( 
    CONSTRAINT constraint_name1 CHECK (condition expression1) [ON MISMATCH DROP | FAIL],  
    CONSTRAINT constraint_name2 CHECK (condition expression2) [ON MISMATCH DROP | FAIL] 
)] 
[PARTITIONED BY (col1, col2, ... )] 
[COMMENT "description or comment"] 
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )] 
AS select_statement 

  • ワークスペース名にスペースが含まれている場合は、バックティックで囲んでください。 `My Workspace`.lakehouse.schema.view_name
  • 具体化されたレイク ビュー名では、大文字と小文字が区別されず、小文字に変換されます (たとえば、 MyTestViewmytestviewになります)。

論争

パラメーター 説明
OR REPLACE 既存の具体化されたレイク ビューを同じ名前で上書きします。 IF NOT EXISTSと組み合わせることはできません。
IF NOT EXISTS 具体化されたレイク ビューがまだ存在しない場合にのみ作成します。 ビューが既に定義されている場合、ステートメントはエラーなしで成功します。 OR REPLACEと組み合わせることはできません。
MLV_Identifier 可視化された湖の景観の名前。 workspace.lakehouse.schema.nameとして完全修飾できます。
CONSTRAINT ... CHECK データ品質ルールを定義します。 CHECK句は、各行が満たす必要があるブール式を指定します。 複数の制約を定義できます。
ON MISMATCH 行が制約に違反したときに実行するアクション。 DROP 行は自動的に削除されます。 FAIL は、エラーで更新を停止します。 既定値は FAIL です。
PARTITIONED BY 具体化されたレイク ビューをパーティション分割する列。フィルター処理された読み取りのクエリ パフォーマンスを向上させることができます。
COMMENT 具体化されたレイクビュー定義に格納されているフリーテキストの説明。
TBLPROPERTIES 具体化されたレイクビューにメタデータとして格納されるキーと値のペア。
AS select_statement 具体化されたレイク ビューのデータを定義する SELECT クエリ。

例示

次の例では、データ品質制約、コメント、パーティション分割を使用して具体化されたレイク ビューを作成します。 OR REPLACE句は、同じ名前の既存のビューを上書きします。

CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
(
    CONSTRAINT valid_quantity CHECK (quantity > 0) ON MISMATCH DROP
)
PARTITIONED BY (category)
COMMENT "Cleaned order data joined from products and orders"
AS SELECT 
    p.productID,
    p.productName,
    p.category,
    o.orderDate,
    o.quantity,
    o.totalAmount
FROM bronze.products p INNER JOIN bronze.orders o
ON p.productID = o.productID

次の例では、よりシンプルな具体化されたレイク ビューを作成します。 IF NOT EXISTS句は、ビューが既に存在する場合にエラーを防ぎ、デプロイ スクリプトに対して安全です。

CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.products_with_sales AS
SELECT 
    p.productID,
    p.productName,
    p.category,
    CASE  
        WHEN COUNT(o.orderID) OVER (PARTITION BY p.productID) > 0 THEN TRUE  
        ELSE FALSE  
        END AS has_sales 
FROM bronze.products p LEFT JOIN bronze.orders o 
ON p.productID = o.productID

ヒント

レイクハウスからマテリアライズド レイク ビューの更新を管理する

具体化された湖のビューを作成した後は、ノートブックから更新を調整しないでください。 代わりに、Lakehouse で次の 2 つの組み込み機能を使用します。

  • データ系列: Fabric は、マテリアライズド レイク ビューの定義に基づいて、それらの依存順序を導き出します。 系列ビューを開くには、リボンの [ 具体化された湖のビュー ] タブを選択し、[ 管理] を選択します。 そこから、実行中の実行に従い、各ビューのアップストリームとダウンストリームの依存関係を調べることができます。
  • スケジュールされた更新: 同じ 管理 ビューから、具体化されたすべてのレイク ビューまたは選択したサブセットを更新する 1 つ以上のスケジュールを作成します。 各スケジュールは個別に実行され、依存関係の順序でビューが更新されるため、ダウンストリーム ビューは常にアップストリーム ビューから新しいデータを読み取ります。 Fabric が一時的なエラーを自動的に再試行します。

ノートブックを使用して、マテリアライズド レイクビューの定義を作成および反復改善します。 リネージュとスケジュールされた更新で順序付け、実行、再試行を処理し、信頼性の高い反復可能なデータを維持するコードを減らします。

マテリアライズド・レイクビューの一覧を取得する

スキーマ内のすべての具体化されたレイク ビューの一覧を取得するには、次の構文を使用します。

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

たとえば、 silver スキーマ内のすべての具体化されたレイク ビューを一覧表示するには、次のようにします。

SHOW MATERIALIZED LAKE VIEWS IN silver;

具体化されたレイク ビューを作成したステートメントを取得する

具体化されたレイク ビューの CREATE ステートメントを取得するには、次の構文を使用します。

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

たとえば、 products_with_salesの定義を取得するには、次のようにします。

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

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

具体化されたレイク ビューの定義 ( SELECT クエリ、制約、パーティション分割など) を変更するには、 CREATE または REPLACE コマンドを使用します。 または、既存のビューを 削除 して再作成することもできます。

マテリアライズド レイクビューの名前を変更する

既存の具体化されたレイク ビューの名前を変更するには、 ALTER MATERIALIZED LAKE VIEW コマンドを使用します。 構文は次のとおりです。

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

たとえば、 products_with_salesの名前を変更するには、次のようにします。

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

ALTER MATERIALIZED LAKE VIEW コマンドは、名前の変更でのみサポートされます。 定義またはその他のプロパティ ( SELECT クエリ、制約、パーティション分割など) を変更するには、「 具体化されたレイク ビューを更新する」を参照してください。

具体化された湖のビューを削除する

具体化されたレイク ビューを削除するには、lakehouse オブジェクト エクスプローラーの [削除 ] オプションを使用するか、 DROP コマンドを実行します。 構文は次のとおりです。

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

たとえば、 products_with_salesを削除するには、次のようにします。

DROP MATERIALIZED LAKE VIEW products_with_sales;

具体化されたレイク ビューの削除または名前変更は、系列ビューとスケジュールされた更新に影響します。 依存するすべてのマテリアライズド レイクビューの参照を必ず更新してください。

現在の制限

具体化されたレイク ビューの Spark SQL ステートメントには、次の制限事項が適用されます。

  • スキーマ名 - すべて大文字のスキーマ名 (たとえば、 MYSCHEMA) はサポートされていません。 大文字と小文字の混在またはすべて小文字を使用します。
  • データ操作言語 (DML) ステートメントはありません 。具体化されたレイク ビューに対して INSERTUPDATE、または DELETE ステートメントを実行することはできません。 データは、定義内の SELECT クエリによってのみ設定されます。
  • タイム トラベル クエリなし — 具体化されたレイク ビュー定義の SELECT クエリでは、Delta Lake タイム トラベル 構文 ( VERSION AS OFTIMESTAMP AS OFなど) を使用できません。
  • ユーザー定義関数がありません 。 具体化されたレイク ビューを定義する SELECT クエリでは、ユーザー定義関数 (UDF) はサポートされていません。
  • ソースとしての一時ビューはありませんSELECT クエリでは、テーブルやその他の具体化されたレイク ビューを参照できますが、一時ビューは参照できません。
  • セッション レベルの Spark プロパティ — セッション レベルで設定された Spark 構成プロパティ (たとえば、 spark.conf.set(...)) は、スケジュールされた更新中には適用されません。 代わりに、レイクハウスまたはワークスペース レベルでプロパティを設定します。