什么是增量实时表?
增量实时表是一个声明性框架,用于生成可靠、可维护且可测试的数据处理管道。 你将定义要对数据执行的转换,而增量实时表管理任务业务流程、群集管理、监视、数据质量和错误处理。
注意
增量实时表需要高级计划。 有关详细信息,请联系 Databricks 帐户团队。
你可以定义系统应该创建并保持最新的流式处理表和具体化视图,而无需使用一系列单独的 Apache Spark 任务来定义数据管道。 增量实时表根据你为每个处理步骤定义的查询来管理数据的转换方式。 你还可以使用增量实时表期望来强制实施数据质量,这样就可以定义预期的数据质量,并指定如何处理达不到这些期望的记录。
要详细了解使用 Delta Live Tables 生成和运行 ETL 管道的好处,请参阅 Delta Live Tables 产品页。
什么是 Delta Live Tables 数据集?
增量实时表数据集是流式处理表、具体化视图和作为声明性查询结果维护的视图。 下表描述了每个数据集的处理方式:
数据集类型 | 如何通过定义的查询处理记录? |
---|---|
流式处理表 | 每条记录只处理一次。 此方式采用仅追加源。 |
具体化视图 | 根据需要处理记录,以返回当前数据状态的准确结果。 应将具体化视图用于数据处理任务,例如转换、聚合或预先计算速度缓慢的查询和频繁使用的计算。 |
视图 | 每次查询视图时都会处理记录。 将视图用于不应发布到公共数据集的中间转换和数据质量检查。 |
以下各部分更详细地说明了每种数据集类型。 要详细了解如何选择数据集类型来实现数据处理要求,请参阅何时使用视图、具体化视图和流式处理表。
流式处理表
流式处理表是一种 Delta 表,它额外支持流式处理或增量数据处理。 使用流式处理表可以处理不断扩大的数据集,每行只会处理一次。 由于大部分数据集会随着时间不断扩大,因此流式处理表非常适合用于大多数引入工作负载。 流式处理表最适合需要全新数据和低延迟的管道。 流式处理表还可用于大规模转换,因为随着新数据的到达可以增量计算结果,使结果保持最新,而无需在每次更新时完全重新计算所有源数据。 流式处理表专为仅追加的数据源而设计。
注意
虽然默认情况下,流式处理表要求使用“仅追加”数据源,但当流式处理源是另一个需要更新或删除的流式处理表时,可以使用 skipChangeCommits 标志改写此行为。
具体化视图
具体化视图是其中的结果已预先计算的视图。 具体化视图根据它们所在的管道的更新计划进行刷新。 具体化视图非常强大,因为它们可以处理输入中的任何更改。 每次管道更新时,都会重新计算查询结果,以反映上游数据集中可能因合规性、更正、聚合或一般 CDC 而发生的变化。 增量实时表将具体化视图实现为 Delta 表,但抽象掉与有效应用更新相关的复杂性,使用户可以专注于编写查询。
视图
Azure Databricks 中的所有视图都在查询源数据集时从中计算结果,并利用缓存优化(如果可用)。 增量实时表不会将视图发布到目录,因此只能在定义视图的管道中引用视图。 视图可用作不应向最终用户或系统公开的中间查询。 Databricks 建议使用视图来实施数据质量约束,或者转换和扩充驱动多个下游查询的数据集。
在增量实时表中声明第一个数据集
增量实时表引入了 Python 和 SQL 的新语法。 若要开始使用增量实时表语法,请参阅教程:运行第一个增量实时表管道中的 Python 和 SQL 示例。
注意
增量实时表将数据集定义与更新处理区分开来,增量实时表笔记本不适合交互式执行。 请参阅什么是增量实时表管道?。
什么是增量实时表管道?
管道是用于使用增量实时表配置和运行数据处理工作流的主单元。
管道包含 Python 或 SQL 源文件中声明的具体化视图和流式处理表。 增量实时表推理这些表之间的依赖关系,确保更新以正确的顺序发生。 对于每个数据集,增量实时表会将当前状态与所需状态进行比较,然后使用有效的处理方法继续创建或更新数据集。
增量实时表管道的设置分为两大类:
- 用于定义一系列笔记本或文件(称为源代码)的配置,这些笔记本或文件使用增量实时表语法来声明数据集。
- 用于控制管道基础结构、依赖项管理、如何处理更新以及如何在工作区中保存表的配置。
大多数配置是可选的,但有些配置需要特别注意,尤其是在配置生产管道时。 其中包括:
- 要使数据在管道外部可用,你必须声明一个目标架构以发布到 Hive 云存储,或者声明一个目标目录和目标架构以发布到 Unity Catalog。
- 数据访问权限是通过用于执行的群集来配置的。 确保已根据数据源和目标存储位置(如果已指定)为群集配置适当的权限。
有关使用 Python 和 SQL 编写管道源代码的详细信息,请参阅增量实时表 SQL 语言参考和增量实时表 Python 语言参考。
有关管道设置和配置的详细信息,请参阅配置增量实时表管道。
部署第一个管道并触发更新
在使用增量实时表处理数据之前,必须配置一个管道。 配置管道后,可以触发更新以计算该管道中每个数据集的结果。 若要开始使用增量实时表管道,请参阅教程:运行第一个增量实时表管道。
什么是管道更新?
当你开始更新时,管道会部署基础结构并重新计算数据状态。 更新执行以下操作:
- 使用正确的配置启动群集。
- 发现定义的所有表和视图,并检查是否存在任何分析错误,例如列名无效、依赖项缺失和语法错误。
- 使用最新的可用数据创建或更新表和视图。
可以根据用例的成本和延迟要求连续或按计划运行管道。 请参阅对增量实时表管道运行更新。
使用增量实时表引入数据
增量实时表支持 Azure Databricks 中可用的所有数据源。
Databricks 建议为大多数引入用例使用流式处理表。 对于进入云对象存储的文件,Databricks 建议使用自动加载程序。 可以使用增量实时表从大多数消息总线直接引入数据。
若要详细了解如何配置对云存储的访问,请参阅云存储配置。
对于自动加载程序不支持的格式,可以使用 Python 或 SQL 查询 Apache Spark 支持的任何格式。 请参阅使用增量实时表加载数据。
监视和强制实施数据质量
可以使用期望来指定对数据集内容的数据质量控制。 与传统数据库中的 CHECK
约束(用于阻止添加任何不符合约束的记录)不同,预期在处理不符合数据质量要求的数据时比较灵活。 这种灵活性允许你处理和存储预计会出现混乱的数据以及必须满足严格质量要求的数据。 请参阅使用 Delta Live Tables 管理数据质量。
增量实时表和 Delta Lake 之间有何关系?
增量实时表扩展了 Delta Lake 的功能。 由于由增量实时表创建和管理的表属于 Delta 表,因此这些表具有 Delta Lake 提供的相同保证和功能。 请参阅什么是 Delta Lake?。
除了可以在 Delta Lake 中设置的许多表属性之外,增量实时表还增加了多个表属性。 请参阅增量实时表属性参考和 Delta 表属性参考。
增量实时表如何创建和管理表
Azure Databricks 自动管理使用增量实时表创建的表,并确定需要如何处理更新,以正确计算表的当前状态及执行一些维护和优化任务。
对于大多数操作,你应该允许增量实时表处理对目标表的任何更新、插入和删除。 有关详细信息和限制,请参阅保留手动删除或更新。
增量实时表执行的维护任务
增量实时表在表更新后的 24 小时内执行维护任务。 维护可以通过删除旧版本的表来提高查询性能和降低成本。 默认情况下,系统执行完整的 OPTIMIZE 操作,随后执行 VACUUM。 可以通过在表的表属性中设置 pipelines.autoOptimize.managed = false
来对表禁用 OPTIMIZE。 仅当管道更新已在计划维护任务之前的 24 小时内运行时,才会执行维护任务。
限制
以下限制适用:
- 增量实时表创建和更新的所有表都是 Delta 表。
- Delta Lake 时间旅行查询仅支持流式处理表,不支持具体化视图。 请参阅使用 Delta Lake 表历史记录。
- 增量实时表表只能定义一次,这意味着,它们只能是所有增量实时表管道中单个操作的目标。
- 作为
APPLY CHANGES INTO
的目标的表不支持标识列,并可能会在具体化视图更新期间重新计算标识列。 出于此原因,Databricks 建议仅将增量实时表中标识列与流式处理表配合使用。 请参阅在 Delta Lake 中使用标识列。 - Azure Databricks 工作区限制为 100 个并发管道更新。
有关将增量实时表与 Unity Catalog 配合使用的特定要求和限制的列表,请参阅将 Unity Catalog 与增量实时表管道配合使用
其他资源
- Databricks REST API 完全支持增量实时表。 请参阅 DLT API。
- 有关管道和表的设置,请参阅增量实时表属性参考。
- 增量实时表 SQL 语言参考。
- 增量实时表 Python 语言参考。