本文介绍 Azure Databricks 上的 DLT 的建议工作负荷。
数据引入
DLT 可以从只能追加的源和包含变更的源引入数据,例如变更数据捕获 (CDC) 通道。 流式处理表支持两种类型的源数据。
从仅追加数据源引入数据
推荐使用流式处理表来处理仅支持追加的数据。 仅追加意味着仅将新数据添加到源数据,并且永远不会更新或删除现有数据。 仅追加数据的示例包括:
- 具有表属性
delta.appendOnly = true
的 Delta 表。 - 定期接收新文件的云存储位置。
- 包含事件的 Kafka 主题。
若要详细了解如何使用 DLT 和流式处理表引入数据,包括示例,请参阅 使用 DLT 加载数据。
从单个仅附加的数据源引入数据
流式处理表可以从任何仅附加数据源引入数据。
从多个仅追加源引入数据
还可以将数据从多个追加写入数据源引入流式表。 例如,可以将多个 Kafka 主题中的事件写入到单个流式处理表中。 为此,请定义用于从一个源读取数据的流式表查询,对于其他源,请使用追加流。
从追加型数据源导入历史数据
当您拥有一个从仅追加的原始数据源引入数据的现有数据集,并希望将历史数据精确地追加一次到该数据集中时,可以使用回填。 为此,请使用追加流查询加载历史数据。 请参阅 回填。
处理变更数据流和数据库快照
Databricks 建议使用 DLT 来处理更改数据馈送(CDF),这些馈送包含来自一个或多个表的可能无序的变更序列。 除了 Debezium、Qlik 和 Amazon DMS 等系统之外,增量表还生成更改数据馈送。 可以使用 Python 或 SQL 通过 DLT 处理更改数据馈送。
Databricks 还建议在处理数据库快照(如从 Oracle 数据库、MySQL 数据库或数据仓库生成的快照)时使用 DLT,而不是更改数据馈送。 DLT Python 接口支持处理数据库快照。
若要处理 CDF,请使用 APPLY CHANGES
API。 请参阅 CDC 如何使用 API 实现APPLY CHANGES
?
若要处理数据库快照,请使用 APPLY CHANGES FROM SNAPSHOT
API。 请参阅 CDC 如何使用 API 实现APPLY CHANGES FROM SNAPSHOT
?
转换数据
DLT 提供两种用于转换数据的解决方案。 具体化视图是一个很好的默认选择,因为它们始终提供正确的结果,并在需要时自动重新处理源数据。 建议对大型流进行低复杂性转换,建议对高级用例使用流式处理表。
使用具体化视图转换数据
物化视图是 DLT 中转换的推荐默认选项。 它们是简单准确的。 但是,它们的缺点是更高的延迟,因为具体化视图可能会处理所有输入数据,以确保针对具体化视图的查询返回正确的结果。
使用具体化视图转换单个表
具体化视图可以从 Delta 表或流式处理表读取,并对输入数据执行任意转换。 具体化视图可以读取所有 Delta 表,包括 Databricks 以外的系统生成的表,使它们可用于迁移和混合管道。
将事实表与维度表进行流快照联接,并与具体化视图联接
具体化视图可以在基本 Delta 表或流式处理表与“lookup”Delta 表之间执行高效增量联接。 只要可能,这些联接就会以增量方式进行处理。 无需将 水印 用于具体化视图和流快照联接。
联接两个事实数据表(流联接)
** 物化视图可以在两个流式表或 Delta 表之间执行高效的增量联接。 这称为流-流联接,具体化视图将在可能的情况下逐步执行。 您无需在具体化视图和流流联接中使用水印。
使用流式处理表转换数据
如果需要转换低延迟的大容量流数据,建议使用流式处理表。
使用流式表来转换单个表
流式处理表可用于转换任何 Delta 表或其他流式处理表中的数据。
以下注意事项适用于此用例:
- 更新流表的定义时,除非完全刷新,否则流表中的现有数据不会更新以体现新的变化。
使用流式处理表将事实数据表与维度表(流快照联接)联接
流式处理表可以将事实数据表与维度表联接。
以下注意事项适用于此用例:
- 更新流式处理表的定义时,除非完全刷新整个表,否则流式处理表中的现有数据将不会更新以反映更改。
- 更新查找表时,流表中的现有数据无法反映更改,除非完全刷新表格。
通过流式处理表联接两个事实数据表(流-流联接)
流式处理表可以联接两个或多个事实数据表,这也被称为流-流联接。
以下注意事项适用于此用例:
- 更新流式处理表的定义时,流式处理表中的现有数据不会更新以反映变化,除非您完全刷新表。
- 若要避免内存不足错误,必须在联接和聚合的两侧使用水印。
- 不会处理无序和延迟到达的数据,这可能会导致数据不准确。 因此,需要手动处理无序和延迟到达的数据。
请参阅 将水印与流-流联接配合使用。