本節包含 Lakeflow Spark 宣告式管線 (SDP) Python 程式設計介面的詳細資料。
- 如需概念資訊和使用 Python 進行管線的概觀,請參閱 使用 Python 開發管線程式碼。
- 如需 SQL 參考,請參閱 管線 SQL 語言參考。
- 如需設定自動載入器的特定詳細資訊,請參閱 什麼是自動載入器?。
pipelines 模組概觀
Lakeflow Spark 宣告式管線的 Python 函式定義在 pyspark.pipelines 模組中(匯入為 dp)。 使用 Python API 實作的管線必須匯入此模組:
from pyspark import pipelines as dp
備註
管線模組僅在管線的情境中可用。 它無法在管線外部執行的 Python 中使用。 如需編輯管線程式碼的詳細資訊,請參閱 使用 Lakeflow 管線編輯器開發和偵錯 ETL 管線。
Apache Spark™ 管線
Apache Spark 從 Spark 4.1 開始包含 宣告式管線,可以透過 pyspark.pipelines 模組取得。 Databricks Runtime 會透過額外的 API 和整合來擴充這些開放原始碼功能,以供受控生產使用。
使用開放原始碼 pipelines 模組撰寫的程式碼會在 Azure Databricks 上執行,無需修改。 下列功能不屬於 Apache Spark 的一部分:
dp.create_auto_cdc_flowdp.create_auto_cdc_from_snapshot_flow@dp.expect(...)@dp.temporary_view
此 pipelines 模組以前在 Azure Databricks 中被稱為 dlt。 關於與 Apache Spark 的差異及細節,請參見 What happened to @dlt?。
資料集定義的函數
管線會使用 Python 裝飾器來定義資料集,例如具體化檢視和串流資料表。 請參閱 定義資料集的函數。
API 參考資料
- append_flow
- create_auto_cdc_flow
- create_auto_cdc_from_snapshot_flow
- create_sink
- create_streaming_table
- 期望
- materialized_view
- table
- temporary_view
Python 管線的考量事項
以下是使用 Lakeflow Spark 宣告式管線 (SDP) Python 介面實作管線時的重要考慮:
- SDP 會在規劃和管線執行期間多次評估定義管線的程式碼。 定義資料集的 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、SDP 與 Apache Spark 的差異
下表展示了 DLT、Lakeflow Spark 宣告式管線與 Apache Spark 宣告式管線在語法與功能的差異。
| 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 |
| 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 |