Important
サーバーレス汎用コンピューティングのノートブックからスタンドアロンの具体化されたビューとストリーミング テーブルの作成と更新は ベータ版 であり、一部のリージョンで利用できます。 「ノートブック」を参照してください。
Pythonを使用して、ノートブックからスタンドアロンの具体化されたビューとストリーミング テーブルを作成および更新できます。 これにより、スタンドアロン パイプラインを他のPythonベースのノートブック ワークフローと共に管理できます。
これを行うには、次の 2 つの方法があります。
-
pyspark.pipelinesデコレーター、@dp.materialized_view、@dp.tableを配置したテーブルを定義します。 ロジックがDataFrameコードとして表現しやすい場合にこれを使います。 「 パイプラインデコレーター付きのテーブルを定義する」を参照してください。 - DatabricksのSQLウェアハウスが実行するSQL文と同じものを
spark.sql()に渡して提出します。 これにより、スタンドアロンのマテリアライズドビューとストリーミング テーブルに関する SQL 機能一式(REFRESHステートメントや更新スケジュールを含む)を利用できます。 「SQL ステートメントをspark.sql()で提出する」を参照してください。
スタンドアロン パイプラインのPythonソースには、サーバーレス汎用コンピューティングにアタッチされたノートブックが必要です。 Python を使用して Databricks SQL ウェアハウスからスタンドアロン パイプラインを作成または更新することはできません。これは、ウェアハウスでは Python ノートブックではなく SQL ステートメントが実行されるためです。 代わりに SQL ウェアハウスを使用するには、「 スタンドアロンの具体化されたビューを使用 する」と「 スタンドアロン ストリーミング テーブルを使用する」を参照してください。
Requirements
Pythonを使用してスタンドアロン パイプラインを作成および更新するには、Databricks Runtime 18.1 以降のサーバーレス汎用コンピューティングにアタッチされたノートブックが必要です。 リージョンの可用性やアクセス許可など、要件の完全な一覧については、「 ノートブック」を参照してください。
パイプラインデコレーターでテーブルを定義します
Lakeflowパイプラインで使うデコレーターと同じもので、スタンドアロンのマテリアライズドビューやストリーミングテーブルを定義できます。 各装飾関数は1つのテーブルを定義します。 セルを実行すると、Azure Databricksがテーブルを作成し、サーバーレスパイプラインでそれを埋めます。 アップデートが完了するとセルが戻ります。
Warning
パイプラインデコレーターは サーバーレス環境バージョン 5以上が必要です。
具現化されたビューを定義する
バッチデータフレームを返す関数に @dp.materialized_view を使いましょう。 以下の例は、Wanderbricksサンプルデータセットのbookingsテーブルから物質化されたビューdaily_booking_revenueを作成します。
from pyspark import pipelines as dp
from pyspark.sql import functions as F
@dp.materialized_view(name="main.default.daily_booking_revenue")
def daily_booking_revenue():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
ストリーミングリードからテーブルを定義するには、代わりに @dp.table を使います。
ストリーミングテーブルを定義する
ストリーミングデータフレームを返す関数に @dp.table を使いましょう。 以下の例は、同じbookingsテーブルのストリーミング読み取りからストリーミングテーブルbookings_rawを作成します。
from pyspark import pipelines as dp
@dp.table(name="main.default.bookings_raw")
def bookings_raw():
return spark.readStream.table("samples.wanderbricks.bookings").select("booking_id", "property_id", "total_amount")
関数がバッチデータフレームを返す場合、 @dp.table は代わりにマテリアライズされたビューを作成します。 唯一の例外は replace_whereで、これは常にストリーミングテーブルになります。 以下の例は、2025年7月1日以降のチェックインの日収を最新のものに保ち、それ以前の日付を再計算しません。
from pyspark import pipelines as dp
from pyspark.sql import functions as F
@dp.table(
name="main.default.booking_revenue_rw",
replace_where=F.col("check_in") >= F.to_date(F.lit("2025-07-01")),
)
def booking_revenue_rw():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
各実行は述語に一致する行を削除し、その範囲のみを再計算します。 REPLACE WHERE フローを使用したバッチ処理を参照してください。
テーブルを更新する
デコレーターで定義したテーブルをリフレッシュするには、そのテーブルを定義したコードを再度実行します。例えばノートブックのセルを再実行したり、ノートブック全体を実行したり、ノートブックをジョブとして実行したりします。 実行のたびに、テーブルが存在しない場合は作成され、存在する場合はリフレッシュされます。
ソースで利用可能なすべてのデータを再処理するには、どちらかのデコレーターに渡 full_refresh=True してください:
@dp.table(name="main.default.bookings_raw", full_refresh=True)
def bookings_raw():
return spark.readStream.table("samples.wanderbricks.bookings").select("booking_id", "property_id", "total_amount")
デコレーターで定義されたテーブルで REFRESH 文を使ったり、 SCHEDULE や TRIGGER ON UPDATEでリフレッシュをスケジュールしたりすることはできません。 スケジュールを更新するには、SQLでテーブルを定義するか、ノートブックをジョブとしてスケジュールしてください。
「Lakeflow ジョブ」を参照してください。
テーブルの設定
デコレーターはパイプライン内で受け入れている共通のデータセットパラメータ、例えば comment、 table_properties、 partition_cols、 cluster_by、 schema、 spark_confを受け入れます。
@dp.materialized_view(
name="main.default.daily_booking_revenue",
comment="Daily booking revenue.",
table_properties={"quality": "gold"},
cluster_by=["check_in"],
)
def daily_booking_revenue():
return (
spark.read.table("samples.wanderbricks.bookings")
.groupBy("check_in")
.agg(F.sum("total_amount").alias("total_revenue"))
)
パラメータリストについては、 materialized_view と 表を参照してください。
private=True はサポートされていません。なぜなら、プライベートテーブルは同じパイプライン内の他のデータセットのみが読み取れるからです。
サポートされていない API
スタンドアロンテーブルは単一のデータセットで単一のフローを持つため、データセット間の関係を記述するAPIは利用できません。 以下はパイプライン外でエラーを発生させます:
-
@dp.temporary_viewとdp.create_streaming_table -
@dp.append_flowその他の追加流量 -
dp.create_auto_cdc_flowとdp.create_auto_cdc_from_snapshot_flow -
@dp.replace_flowおよび REPLACE USING フローを定義するreplace_usingのパラメータ REPLACE USING フローを使用した部分スナップショット置換を参照してください。 dp.create_sink-
@dp.expectや@dp.expect_or_failなどの期待
これらを使うには、代わりにLakeflowパイプラインを作成してください。 Python を使用した Develop パイプライン コードを参照してください。
SQL文を提出します spark.sql()
Python ノートブックで、Databricks SQL ウェアハウスから実行するのと同じステートメントをspark.sql()に渡します。 スタンドアロンの具体化されたビューとストリーミング テーブルの構文は同じです。ステートメントを送信する方法のみが異なります。 ウェアハウスと同様に、各 CREATE または REFRESH ステートメントは、サーバーレス パイプラインを実行して操作を処理します。
spark セッションは既定でAzure Databricksノートブックで使用できるため、インポートは必要ありません。
具体化されたビューを作成する
次の例では、基本テーブル mv1 からマテリアライズド ビュー base_table1 を作成します。
spark.sql("""
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM base_table1
GROUP BY date
""")
スケジュールされた更新やトリガーされた更新など、完全な CREATE MATERIALIZED VIEW の詳細については、「 具体化されたビューを作成する」を参照してください。
ストリーミング テーブルを作成する
次の例では、sales テーブルからストリーミング テーブル raw_dataを作成します。
spark.sql("""
CREATE OR REFRESH STREAMING TABLE sales
AS SELECT product, price FROM STREAM raw_data
""")
自動ローダーを使用したファイルの読み込みとスケジュールなど、完全な CREATE STREAMING TABLE の詳細については、「 スタンドアロン ストリーミング テーブルの使用」を参照してください。
具体化されたビューまたはストリーミング テーブルを更新する
REFRESH ステートメントを使用して、スタンドアロン テーブルをソースの最新のデータで更新します。
spark.sql("REFRESH MATERIALIZED VIEW mv1")
spark.sql("REFRESH STREAMING TABLE sales")
サーバーレス汎用コンピューティングでは、更新は同期的です。 非同期更新 ( ASYNC キーワード) はサポートされていません。
サーバーレスの一般的なコンピューティングを参照してください。
文をパラメーター化する
ハードコーディングするのではなく、Python コードからステートメントに値を渡すには、SQL で名前付きパラメーター マーカーを使用し、argsのspark.sql()引数を使用してその値を指定します。 リテラル値に直接 :min_sales などのマーカーを使用します。 識別子をプレーン文字列値として置き換えることができないため、パラメーターがオブジェクト名 (テーブル、ビュー、スキーマなど) である場合にのみ、マーカーを IDENTIFIER() でラップします。
次の例では、具体化されたビュー名とフィルター値の両方をパラメーター化します。
mv_name = "main.sales.regional_sales"
min_sales = 1000
spark.sql("""
CREATE OR REPLACE MATERIALIZED VIEW IDENTIFIER(:mv)
AS SELECT
region,
sum(sales) AS sum_of_sales
FROM base_table1
WHERE sales > :min_sales
GROUP BY region
""", args={
"mv": mv_name,
"min_sales": min_sales,
})
詳細については、「 パラメーター マーカー と IDENTIFIER 句」を参照してください。
その他のステートメントを実行する
Python ノートブックからスタンドアロンの具体化されたビューまたはストリーミング テーブル ステートメントを実行するには、更新のスケジュール設定、テーブルの変更、またはテーブルの削除を行うステートメントを含む、spark.sql()に渡します。 具体化されたビューとストリーミング テーブル (SQL 構文を含む) の使用方法については、「 スタンドアロンマテリアライズド ビューの使用 」および「 スタンドアロン ストリーミング テーブルの使用」を参照してください。
制限事項
サーバーレスの一般的なコンピューティングで作成されたスタンドアロンの具体化されたビューとストリーミング テーブルには、非同期更新のサポートやテーブルごとのコスト属性なしなど、追加の制限があります。 完全な一覧については、「 サーバーレス汎用コンピューティング」を参照してください。
これらのパイプラインはSQLウェアハウスではなくサーバーレスの一般的な計算上で動作するため、囲み込むウェアハウスからカスタムタグを引き継ぎません。 ウェアハウスタグの system.billing.usage への伝播は、SQLウェアハウスから文が実行されるマテリアライズされたビューやストリーミングテーブルにのみ適用されます。
カスタム タグを使用した SQL ウェアハウスの属性コストを参照してください。
パイプラインデコレーターで定義されたテーブルには、以下の追加の制限があります:
-
REFRESHステートメントでリフレッシュしたり、SCHEDULEやTRIGGER ON UPDATEでリフレッシュをスケジュールすることはできません。 「 テーブルの更新」を参照してください。 - 期待、追加フロー、変更データキャプチャ(CDC)フロー、シンク、一時ビューはサポートされていません。 「 サポートされていないAPI」を参照してください。
-
private=Trueはサポートされません。