你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 流分析:写入 Delta Lake 表

Delta Lake 是一种开放格式,可以提高数据湖的可靠性、质量和性能。 可以使用 Azure 流分析直接将流式处理数据写入 Delta Lake 表,无需编写一行代码。

流分析作业可以配置为通过本机 Delta Lake 输出连接器写入到 Azure Data Lake Storage Gen2 帐户中的新 Delta 表或预先创建的 Delta 表。 此连接器针对在追加模式下高速引入 Delta 表进行了优化。 它还提供了“刚好一次”语义,这可以保证不会丢失或复制任何数据。 将实时数据流从 Azure 事件中心引入 Delta 表后,即可执行即席交互式或批处理分析。

Delta Lake 配置

若要在 Delta Lake 中写入数据,需要连接到 Data Lake Storage Gen2 帐户。 下表列出了与 Delta Lake 配置相关的属性。

属性名称 说明
事件序列化格式 输出数据的序列化格式。 支持 JSON、CSV、Avro 和 Parquet。 Delta Lake 在此处列为一个选项。 如果选择 Delta Lake,则数据采用 Parquet 格式。
Delta 路径名称 此路径用于写入指定容器中的 Delta Lake 表。 其中包括表名称。 下一部分提供了详细信息。
分区列 可选。 从输出数据到分区的 {field} 名称。 仅支持一个分区列。 列的值必须是 string 类型。

若要查看 Data Lake Storage Gen2 配置的完整列表,请参阅 Azure Data Lake Storage Gen2 概述

Delta 路径名称

Delta 路径名称用于指定存储在 Data Lake Storage Gen2 中的 Delta Lake 表的位置和名称。

可以使用一个或多个路径段来定义 Delta 表的路径和 Delta 表名称。 路径段是指对应于虚拟目录名称的相邻分隔符(例如,正斜杠“/”)之间的字符串。

段名称是字母数字,并且可以包含空格、连字符和下划线。 最后一个路径段用作表名。

对 Delta 路径名称的限制包括:

  • 字段名称不区分大小写。 例如,服务无法区分 ID 列和 id 列。
  • 不允许使用动态 {field} 名称。 例如,{ID} 被视为文本 {ID}。
  • 构成名称的路径段数目不能超过 254 个。

示例

Delta 路径名称的示例:

  • 示例 1:WestUS/CA/factory1/device-table
  • 示例 2:Test/demo
  • 示例 3:mytable

示例输出文件:

  1. 在所选容器下,目录路径为 WestEurope/CA/factory1,Delta 表文件夹名称为 device-table
  2. 在所选容器下,目录路径为 Test,Delta 表文件夹名称为 demo
  3. 在所选容器下,Delta 表文件夹名称为 mytable

创建一个新表

如果在 Delta 路径名称指定的位置还没有具有相同名称的 Delta Lake 表,则默认情况下,流分析会创建一个新的 Delta 表。 使用以下配置创建这个新表:

写入表

如果在 Delta 路径名称指定的位置已有一个具有相同名称的 Delta Lake 表,则默认情况下,流分析会将新记录写入现有表。

“刚好一次”交付

事务日志使 Delta Lake 能够保证“刚好一次”处理。 在单个作业运行过程中将数据输出到 Data Lake Storage Gen2 时,流分析还会提供“刚好一次”交付。

架构实施

架构强制意味着对表的所有新写入在写入时与目标表的架构强制兼容,以确保数据质量。

输出数据的所有记录都投影到现有表的架构。 如果要将输出写入新的 Delta 表,则使用第一条记录创建表架构。 与现有表架构相比,如果传入的数据有额外的一列,则在写入数据时不会写入该列。 与现有表架构相比,如果传入的数据缺少某一列,则在写入时该列为 null。

如果 Delta 表的架构与流式处理作业记录的架构之间没有交集,这被视为架构转换失败的实例。 这不是唯一被视为架构转换失败的情况。

在架构转换失败时,作业行为将遵循在作业级别配置的输出数据错误处理策略

Delta 日志检查点

流分析作业将以 V1 格式定期创建 Delta 日志检查点。 Delta 日志检查点是 Delta 表的快照,通常包含流分析作业生成的数据文件的名称。 如果数据文件数较大,则会产生大型检查点,这可能会导致流分析作业中的内存问题。

限制

  • 不支持动态分区键(在 Delta 路径中指定记录架构的列的名称)。
  • 不支持多个分区列。 如果需要多个分区列,建议在查询中使用组合键,然后将其指定为分区列。
    • 可以在查询中创建组合键。 示例为 "SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]"
  • 写入 Delta Lake 是“仅追加”操作。
  • 查询测试中的架构检查不可用。
  • 流分析不会执行小型文件压缩。
  • 在不压缩的情况下创建所有数据文件。
  • 不支持日期和十进制类型
  • 写入具有编写器功能的编写器版本 7 或更高版本的现有表失败。
  • 当流分析作业将一批数据写入 Delta Lake 时,它可以生成多个添加文件操作。 如果为单个批处理生成了过多的添加文件操作,流分析作业可能会停滞。
  • 流分析作业只能读取和写入单个部分 V1 检查点。 不支持多部分检查点和检查点 V2 格式。