Lakeflow 管道的 Python 接口定义在 pyspark.pipelines 模块中,并作为 dp 导入。
该模块提供了用于定义数据集、流程、接收器和数据质量期望的装饰器和函数。 无服务器管道 运行这些定义时,无需配置集群。
- 有关使用 Python 进行管道的概念信息和概述,请参阅 使用 Python 开发管道代码。
- 有关 SQL 参考,请参阅 管道 SQL 语言参考。
- 有关特定于配置自动加载程序的详细信息,请参阅什么是自动加载程序?
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_flowdp.create_auto_cdc_from_snapshot_flow@dp.expect(...)
该 pipelines 模块以前在 Azure Databricks 中称为 dlt。 如需详细信息以及更多关于与 Apache Spark 的差异的信息,请参阅 发生了什么 @dlt?。
用于定义数据集的函数
管道使用 Python 修饰器来定义具体化视图和流式处理表等数据集。 请参阅 Functions 来定义数据集。
API 参考
- append_flow
- create_auto_cdc_flow
- create_auto_cdc_from_snapshot_flow
- create_table
- create_sink
- create_streaming_table
- 期望值
- foreach_batch_sink
- materialized_view
- replace_flow
- 桌子
- temporary_view
- update_flow
Python 管道的编码要求
在使用 Python 接口实现管道时,以下是几个重要要求:
- 流水线在规划和运行过程中会多次评估其源代码。 定义数据集的 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 声明性管道。
要了解管道配置到 SDP 项目规范的逐项属性映射,请参阅 管道属性参考。
注释
在 Databricks 文档中,Databricks 产品称为 Lakeflow pipelines,而它扩展的 Apache Spark 项目则称为 Apache Spark™ Declarative Pipelines(SDP)。 两者是互操作的,但功能有所不同。 例如,这些 AUTO CDC API 仅在 Lakeflow 管道中可用。
| Area | DLT 语法 | SDP 语法(如适用: Lakeflow 和 Apache) | 在 Apache Spark 中可用 |
|---|---|---|---|
| 导入 | import dlt |
from pyspark import pipelines (as 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(...) |
否 |