DLT 的建议工作负荷

本文介绍 Azure Databricks 上的 DLT 的建议工作负荷。

数据引入

DLT 可以从只能追加的源和包含变更的源引入数据,例如变更数据捕获 (CDC) 通道。 流式处理表支持两种类型的源数据。

从仅追加数据源引入数据

推荐使用流式处理表来处理仅支持追加的数据。 仅追加意味着仅将新数据添加到源数据,并且永远不会更新或删除现有数据。 仅追加数据的示例包括:

  • 具有表属性 delta.appendOnly = true的 Delta 表。
  • 定期接收新文件的云存储位置。
  • 包含事件的 Kafka 主题。

若要详细了解如何使用 DLT 和流式处理表引入数据,包括示例,请参阅 使用 DLT 加载数据

从单个仅附加的数据源引入数据

流式处理表可以从任何仅附加数据源引入数据。

DLT 工作负荷是一个仅追加源。

从多个仅追加源引入数据

还可以将数据从多个追加写入数据源引入流式表。 例如,可以将多个 Kafka 主题中的事件写入到单个流式处理表中。 为此,请定义用于从一个源读取数据的流式表查询,对于其他源,请使用追加流

DLT 工作负载包含多个仅追加源。

从追加型数据源导入历史数据

当您拥有一个从仅追加的原始数据源引入数据的现有数据集,并希望将历史数据精确地追加一次到该数据集中时,可以使用回填。 为此,请使用追加流查询加载历史数据。 请参阅 回填

DLT 工作负载使用仅追加的源进行一次性回填。

处理变更数据流和数据库快照

Databricks 建议使用 DLT 来处理更改数据馈送(CDF),这些馈送包含来自一个或多个表的可能无序的变更序列。 除了 Debezium、Qlik 和 Amazon DMS 等系统之外,增量表还生成更改数据馈送。 可以使用 Python 或 SQL 通过 DLT 处理更改数据馈送。

Databricks 还建议在处理数据库快照(如从 Oracle 数据库、MySQL 数据库或数据仓库生成的快照)时使用 DLT,而不是更改数据馈送。 DLT Python 接口支持处理数据库快照。

若要处理 CDF,请使用 APPLY CHANGES API。 请参阅 CDC 如何使用 API 实现APPLY CHANGES

DLT 工作负载的变更流。

若要处理数据库快照,请使用 APPLY CHANGES FROM SNAPSHOT API。 请参阅 CDC 如何使用 API 实现APPLY CHANGES FROM SNAPSHOT

DLT 序列的完整快照。

转换数据

DLT 提供两种用于转换数据的解决方案。 具体化视图是一个很好的默认选择,因为它们始终提供正确的结果,并在需要时自动重新处理源数据。 建议对大型流进行低复杂性转换,建议对高级用例使用流式处理表。

使用具体化视图转换数据

物化视图是 DLT 中转换的推荐默认选项。 它们是简单准确的。 但是,它们的缺点是更高的延迟,因为具体化视图可能会处理所有输入数据,以确保针对具体化视图的查询返回正确的结果。

使用具体化视图转换单个表

具体化视图可以从 Delta 表或流式处理表读取,并对输入数据执行任意转换。 具体化视图可以读取所有 Delta 表,包括 Databricks 以外的系统生成的表,使它们可用于迁移和混合管道。

单个表的 DLT 具体化视图。

将事实表与维度表进行流快照联接,并与具体化视图联接

具体化视图可以在基本 Delta 表或流式处理表与“lookup”Delta 表之间执行高效增量联接。 只要可能,这些联接就会以增量方式进行处理。 无需将 水印 用于具体化视图和流快照联接。

DLT 物化视图流-快照连接。

联接两个事实数据表(流联接)

** 物化视图可以在两个流式表或 Delta 表之间执行高效的增量联接。 这称为流-流联接,具体化视图将在可能的情况下逐步执行。 您无需在具体化视图和流流联接中使用水印

DLT 物化视图流式快照连接。

使用流式处理表转换数据

如果需要转换低延迟的大容量流数据,建议使用流式处理表。

使用流式表来转换单个表

流式处理表可用于转换任何 Delta 表或其他流式处理表中的数据。

以下注意事项适用于此用例:

  • 更新流表的定义时,除非完全刷新,否则流表中的现有数据不会更新以体现新的变化。

DLT 转换单个表。

使用流式处理表将事实数据表与维度表(流快照联接)联接

流式处理表可以将事实数据表与维度表联接。

以下注意事项适用于此用例:

  • 更新流式处理表的定义时,除非完全刷新整个表,否则流式处理表中的现有数据将不会更新以反映更改。
  • 更新查找表时,流表中的现有数据无法反映更改,除非完全刷新表格。

DLT 流式处理表流快照联接。

通过流式处理表联接两个事实数据表(流-流联接)

流式处理表可以联接两个或多个事实数据表,这也被称为流-流联接。

以下注意事项适用于此用例:

  • 更新流式处理表的定义时,流式处理表中的现有数据不会更新以反映变化,除非您完全刷新表。
  • 若要避免内存不足错误,必须在联接和聚合的两侧使用水印。
  • 不会处理无序和延迟到达的数据,这可能会导致数据不准确。 因此,需要手动处理无序和延迟到达的数据。

请参阅 将水印与流-流联接配合使用

DLT 流式处理表流联接。