Lakeflow 管線 Python 語言參考

Lakeflow 管線的 Python 介面定義於 pyspark.pipelines 模組中,並以 dp 匯入。

該模組提供裝飾器及定義資料集、流程、接收端及資料品質期望的功能。 無伺服器管線 會執行這些定義,不需要你配置叢集。

pipelines 模組概觀

Lakeflow 管線的 Python 函式定義於pyspark.pipelines模組中(匯入為 dp)。 使用 Python API 實作的管線必須匯入此模組:

from pyspark import pipelines as dp

備註

大部分管線模組僅在管線情境中提供。 如需編輯管線程式碼的詳細資訊,請參閱 使用 Lakeflow 管線編輯器開發和偵錯 ETL 管線。

你也可以在管線之外,透過無伺服器的一般運算,在筆記本中套用@materialized_view@table,定義獨立的實體化視圖或串流表。 請參見 使用管線裝飾器定義資料表。

Apache Spark™ 管線

Apache Spark 從 Spark 4.1 開始包含 宣告式管線,可以透過 pyspark.pipelines 模組取得。 Databricks Runtime 會透過額外的 API 和整合來擴充這些開放原始碼功能,以供受控生產使用。

使用開放原始碼 pipelines 模組撰寫的程式碼會在 Azure Databricks 上執行,無需修改。 下列功能不屬於 Apache Spark 的一部分:

  • dp.create_auto_cdc_flow
  • dp.create_auto_cdc_from_snapshot_flow
  • @dp.expect(...)

此 pipelines 模組以前在 Azure Databricks 中被稱為 dlt。 關於與 Apache Spark 的差異及細節,請參見 What happened to @dlt?。

資料集定義的函數

管線會使用 Python 裝飾器來定義資料集,例如具體化檢視和串流資料表。 請參閱 定義資料集的函數。

API 參考資料

Python 管線的編碼需求

以下為使用 Python 介面實作管線時的重要要求:

  • 管線在規劃與各次執行時會多次評估其原始碼。 定義資料集的 Python 函數應僅包含定義資料表或檢視所需的程式碼。 資料集定義中包含的任意 Python 邏輯可能會導致非預期的行為。
  • 請勿嘗試在資料集定義中實作自訂監控邏輯。 請參閱 定義使用事件掛勾的管線自訂監視。
  • 用來定義資料集的函式必須傳回 Spark DataFrame。 請勿在資料集定義中包含與傳回的 DataFrame 無關的邏輯。
  • 切勿使用將檔案或資料表儲存或寫入為管線資料集程式碼一部分的方法。

絕不應在管線程式碼中使用的 Apache Spark 作業範例:

  • collect()
  • count()
  • toPandas()
  • save()
  • saveAsTable()
  • start()
  • toTable()

怎麼了 @dlt?

先前,Azure Databricks 會使用模組 dlt 來支援管線功能。 模組 dlt 已由模組 pyspark.pipelines 取代。 您仍然可以使用dlt,但 Databricks 建議使用pipelines。

DLT、Lakeflow 管線與 Apache Spark™ 宣告式管線的差異

下表展示了 DLT、Lakeflow 管線與 Apache Spark™ 宣告式管線在語法結構與功能上的差異。

關於 Lakeflow 管線與 Apache Spark™ 宣告式管線共享及新增的功能層級比較,請參見 Apache Spark 宣告式管線。

若欲逐屬性對應管線配置與 SDP 專案規範,請參見管線屬性參考。

備註

在 Databricks 文件中,Databricks 產品稱為 Lakeflow 管線,而它所延伸的 Apache Spark 專案則稱為 Apache Spark™ 宣告式管線(SDP)。 兩者可互通,但功能有所不同。 例如,AUTO CDC API 僅在 Lakeflow 管線中提供。

Area DLT 語法 SDP 語法(Lakeflow 與 Apache,適用時) 在 Apache Spark 中可用
匯入 import dlt from pyspark import pipelines (as dp可選) Yes
串流資料表 @dlt.table 使用串流資料框 @dp.table Yes
具現化視圖 @dlt.table 使用批次資料框 @dp.materialized_view Yes
View @dlt.view @dp.temporary_view Yes
附加流程 @dlt.append_flow @dp.append_flow Yes
更新流程 無法取得 @dp.update_flow 否
SQL – 串流 CREATE STREAMING TABLE ... CREATE STREAMING TABLE ... Yes
SQL – 實體化 CREATE MATERIALIZED VIEW ... CREATE MATERIALIZED VIEW ... Yes
SQL – 流程 CREATE FLOW ... CREATE FLOW ... Yes
事件記錄 spark.read.table("event_log") spark.read.table("event_log") 否
應用變更(CDC) dlt.apply_changes(...) dp.create_auto_cdc_flow(...) 否
Expectations @dlt.expect(...) dp.expect(...) 否
連續模式 具有連續觸發器的管線設定 具有連續觸發器的管線設定 否
水槽 @dlt.create_sink(...) dp.create_sink(...) Yes
ForEachBatch 水槽 無法取得 @dp.foreach_batch_sink(...) 否
ForEach 水槽 無法取得 @dp.foreach_sink(...) 否