本部分提供了 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 的差异的信息,请参阅 发生了什么 @dlt?。
用于定义数据集的函数
管道使用 Python 修饰器来定义具体化视图和流式处理表等数据集。 请参阅 Functions 来定义数据集。
API 参考
- append_flow
- 创建自动CDC流程
- create_auto_cdc_from_snapshot_flow
- create_sink
- create_streaming_table
- 期望值
- materialized_view
- 桌子
- temporary_view
Python 管道注意事项
使用 Lakeflow Spark 声明性管道(SDP)Python 接口实现管道时,需要注意以下重要事项:
- SDP 评估在规划和管道运行期间多次定义管道的代码。 定义数据集的 Python 函数应仅包含定义表或视图所需的代码。 数据集定义中包含的任意 Python 逻辑可能会导致意外行为。
- 不要尝试在数据集定义中实现自定义监视逻辑。 请参阅 使用事件挂钩定义管道的自定义监视。
- 用于定义数据集的函数必须返回 Spark 数据帧。 不要在数据集定义中包含与返回的数据帧无关的逻辑。
- 切勿使用将文件或表保存或写入到管道数据集代码中的方法。
绝不能在管道代码中使用的 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(可选) |
是的 |
| 流式处理表 |
@dlt.table 配合流式数据框 |
@dp.table |
是的 |
| 具体化视图 |
@dlt.table 使用批量数据帧 |
@dp.materialized_view |
是的 |
| 查看 | @dlt.view |
@dp.temporary_view |
是的 |
| 追加流 | @dlt.append_flow |
@dp.append_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(...) |
是的 |