Azure Databricks 提供了两种构建物化视图和流式表的方式:独立管道或 Lakeflow 管道。 两者都在同一声明性引擎上运行,并生成 Unity 目录托管表。 区别在于整个流程中有多少是由你来构建和运行的。
-
独立具体化视图或流式处理表是使用 SQL 语法定义的单个数据集。 Azure Databricks 会在后台创建并管理一个管道,以对其进行刷新。 您可以从 Databricks SQL 仓库中创建和刷新独立数据集,也可以使用
spark.sql()在无服务器通用计算上运行的笔记本中创建和刷新独立数据集。 请参阅 独立管道。 - Lakeflow 管道是您作为一个整体创建和运行的管道。 它可以包含多个采用 SQL 和 Python 的数据集,并具备依赖关系编排、数据血缘关系以及面向整个管道的运维功能。 请参阅什么是管道?
当您创建独立的物化视图或流表时,托管管道会显示在 作业和管道 页面上,并显示为 MV/ST 类型的管道。 Lakeflow 管道中定义的数据集具有管道类型 ETL。
何时使用独立管道
在以下情况下,请使用独立的物化视图和流式表:
- 可以使用单个具体化视图或流式处理表加速查询或转换数据。
- 您可以在 Databricks SQL 仓库、SQL 编辑器或基于无服务器通用计算的笔记本中工作,并使用
SCHEDULE、TRIGGER ON UPDATE或作业中的 SQL 任务来安排刷新。 - 你不需要输出端、多阶段编排或其他管道专属功能。
何时使用 Lakeflow 管道
在以下情况下使用 Lakeflow 管道:
- 你构建一个包含中间数据集的多阶段管道,Azure Databricks 在这些数据集之间管理依赖关系和数据沿袭。 中间数据集可以发布到目录,也可以仅供该管道私有使用。
- 您可以在 Python 中编写表格和流程。
- 您可以使用接收器(
create_sink()或foreach_batch_sink())将数据写入外部 Delta 表或事件流目标。 - 您使用
create_auto_cdc_from_snapshot_flow()从数据库快照中应用变更数据捕获。 - 你希望在整个管道中实现触发执行或连续执行。
Comparison
| Property | 独立流式表或具体化视图 | 管道流式表或具体化视图 |
|---|---|---|
| 创作界面 | SQL 语法,来自 Databricks SQL 数据仓库,或在基于无服务器通用计算的笔记本中使用 spark.sql() |
SQL 和Python |
| Scope | 一个数据集,位于由 Azure Databricks 为你管理的管道中 | 单个流水线中的多个数据集,支持依赖关系编排和数据沿袭 |
| Execution | 由 SCHEDULE、TRIGGER ON UPDATE 或 SQL 任务触发 |
触发式或连续 |
| 流水线专属功能 | 接收端、create_auto_cdc_from_snapshot_flow()、私有数据集 |
|
| 管道类型标签 | MV/ST |
ETL |
| 在管道之间移动 | 不支持;请在目标管道中重新创建该表 | 支持 |