Lakeflow 管道 Python 语言参考

Lakeflow 管道的 Python 接口定义在 pyspark.pipelines 模块中,并作为 dp 导入。

pipelines 模块概述

Lakeflow 管道 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_flow
  • dp.create_auto_cdc_from_snapshot_flow
  • @dp.expect(...)

pipelines 模块以前在 Azure Databricks 中称为 dlt。 如需详细信息以及更多关于与 Apache Spark 的差异的信息,请参阅 发生了什么 @dlt

用于定义数据集的函数

管道使用 Python 修饰器来定义具体化视图和流式处理表等数据集。 请参阅 Functions 来定义数据集

API 参考

Python 管道的编码要求

使用 Lakeflow 管道Python接口实现管道时,需要满足以下重要要求:

  • Lakeflow 管道会在规划阶段和管道运行期间多次评估定义管道的代码。 定义数据集的 Python 函数应仅包含定义表或视图所需的代码。 数据集定义中包含的任意 Python 逻辑可能会导致意外行为。
  • 不要尝试在数据集定义中实现自定义监视逻辑。 请参阅使用事件挂钩定义管道的自定义监视
  • 用于定义数据集的函数必须返回 Spark 数据帧。 不要在数据集定义中包含与返回的数据帧无关的逻辑。
  • 切勿使用将文件或表保存或写入到管道数据集代码中的方法。

绝不能在管道代码中使用的 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 Declarative Pipelines

要了解管道配置到 SDP 项目规范的逐项属性映射,请参阅 管道属性参考

注释

在 Databricks 文档中,Databricks 产品称为 Lakeflow 管道,它扩展的开源框架是 Apache Spark™ 声明性管道SDP)。 两者互操作但功能不同,例如, AUTO CDC API 仅在 Lakeflow 管道中可用。

Area DLT 语法 SDP 语法(如适用: Lakeflow 和 Apache) 在 Apache Spark 中可用
导入 import dlt from pyspark import pipelinesas dp(可选) 是的
流式处理表 具有流式处理数据帧的 @dlt.table @dp.table 是的
具体化视图 具有批处理数据帧的 @dlt.table @dp.materialized_view 是的
视图 @dlt.view @dp.temporary_view 是的
追加流 @dlt.append_flow @dp.append_flow 是的
更新流程 不可用 @dp.update_flow
SQL - 流式处理 CREATE STREAMING TABLE ... CREATE STREAMING TABLE ... 是的
SQL – 具体化 CREATE MATERIALIZED VIEW ... CREATE MATERIALIZED VIEW ... 是的
SQL - 数据流 CREATE FLOW ... CREATE FLOW ... 是的
事件日志 spark.read.table("event_log") spark.read.table("event_log")
应用更改 (CDC) dlt.apply_changes(...) dp.create_auto_cdc_flow(...)
Expectations @dlt.expect(...) dp.expect(...)
连续模式 使用连续触发器的管道配置 (相同)
Sink @dlt.create_sink(...) dp.create_sink(...) 是的
ForEachBatch 接收器 不可用 @dp.foreach_batch_sink(...)