将 Azure 数据资源管理器与 Azure 数据工厂集成

Azure 数据工厂 (ADF) 是基于云的数据集成服务,可用于集成不同的数据存储,以及对数据执行活动。 使用 ADF 可以创建数据驱动式工作流用于协调和自动化数据移动与数据转换。 Azure 数据资源管理器是 Azure 数据工厂中支持的数据存储之一。

Azure 数据资源管理器的 Azure 数据工厂活动

Azure 数据资源管理器用户可以使用 Azure 数据工厂的各种集成:

复制活动

Azure 数据工厂复制活动用于在数据存储之间传输数据。 支持将 Azure 数据资源管理器用作源,在这种情况下,数据将从 Azure 数据资源管理器复制到任何受支持的数据存储;也可以将它用作接收器,在这种情况下,数据将从任何受支持的数据存储复制到 Azure 数据资源管理器。 有关详细信息,请参阅使用 Azure 数据工厂向/从 Azure 数据资源管理器复制数据。 有关详细演练,请参阅将数据从 Azure 数据工厂加载到 Azure 数据资源管理器。 Azure IR (Integration Runtime) 支持使用 Azure 数据资源管理器在 Azure 内部复制数据,自承载 IR 支持使用 Azure 数据资源管理器从/向本地或配置了访问控制的网络(例如 Azure 虚拟网络)中的数据存储复制数据。 有关详细信息,请参阅要使用哪个 IR。

提示

使用复制活动以及创建链接服务数据集时,请选择数据存储“Azure 数据资源管理器(Kusto)”,而不要选择旧数据存储“Kusto”。

查找活动

查找活动用于在 Azure 数据资源管理器中执行查询。 查询结果将作为查找活动的输出返回,可以在管道中的下一个活动中使用,具体如 ADF 查找文档中所述。

除了将响应大小限制为 5,000 行和 2 MB 以外,该活动还将查询超时限制为 1 小时。

命令活动

使用命令活动可以执行 Azure 数据资源管理器管理命令。 与查询不同,管理命令可能会修改数据或元数据。 某些管理命令旨在通过 .ingest.set-or-append 等命令将数据引入 Azure 数据资源管理器,或通过 .export 等命令将数据从 Azure 数据资源管理器复制到外部数据存储。 有关命令活动的详细演练,请参阅使用 Azure 数据工厂命令活动运行 Azure 数据资源管理器管理类命令。 使用管理命令复制数据有时比使用复制活动更快且更节省。 若要确定何时使用命令活动或复制活动,请参阅复制数据时在复制活动与命令活动之间进行选择

从数据库模板批量复制

使用 Azure 数据工厂模板从数据库批量复制到 Azure 数据资源管理器是一个预定义的 Azure 数据工厂管道。 使用该模板可针对每个数据库或每个表创建多个管道,以更快地复制数据。

映射数据流

Azure 数据工厂映射数据流是一种直观的数据转换过程,允许数据工程师无需编写代码即可开发图形数据转换逻辑。 要创建数据流并将数据引入 Azure 数据资源管理器,请使用以下方法:

  1. 创建映射数据流
  2. 将数据导出到 Azure Blob
  3. 定义事件网格ADF 复制活动,将数据引入 Azure 数据资源管理器。

复制数据时在复制活动与 Azure 数据资源管理器命令活动之间进行选择

本部分帮助你根据数据复制需求选择正确的活动。

从/向 Azure 数据资源管理器复制数据时,可以使用 Azure 数据工厂中的两个选项:

  • 复制活动。
  • Azure 数据资源管理器命令活动,该活动执行某个管理命令来传输 Azure 数据资源管理器中的数据。

从 Azure 数据资源管理器复制数据

可以使用复制活动或 .export 命令从 Azure 数据资源管理器复制数据。 .export 命令执行某个查询,然后导出该查询的结果。

下表比较了用于从 Azure 数据资源管理器复制数据的复制活动和 .export 命令。

复制活动 .export 命令
流程说明 ADF 对 Kusto 执行查询,处理结果,然后将结果发送到目标数据存储。
Azure 数据资源管理器 > ADF > 接收器数据存储
ADF 将 .export 管理命令发送到 Azure 数据资源管理器,后者执行该命令,然后将数据直接发送到目标数据存储。
(** Azure 数据资源管理器 > 接收器数据存储**)
支持的目标数据存储 有多种支持的数据存储 ADLSv2、Azure Blob、SQL 数据库
“性能” 集中式
  • 分布式(默认配置),从多个节点同时导出数据
  • 速度更快且更具 COGS(所售货物成本)效益。
服务器限制 可以提高/禁用查询限制。 默认情况下,ADF 查询包含:
  • 500,000 条记录或 64 MB 的大小限制。
  • 10 分钟时间限制。
  • noTruncation 设置为 false。
默认情况下,可提高或禁用查询限制:
  • 禁用大小限制。
  • 将服务器超时提高至 1 小时。
  • MaxMemoryConsumptionPerIteratorMaxMemoryConsumptionPerQueryPerNode 提高至最大值(5 GB,TotalPhysicalMemory/2)。

提示

如果复制目标是 .export 命令支持的数据存储之一,并且没有任何复制活动功能对于满足需求而言至关重要,请选择 .export 命令。

将数据复制到 Azure 数据资源管理器

可以使用复制活动或从查询引入.set-or-append.set-or-replace.set.replace))和从存储引入 (.ingest) 等引入命令,将数据复制到 Azure 数据资源管理器。

下表比较了用于将数据复制到 Azure 数据资源管理器的复制活动和引入命令。

复制活动 从查询引入
.set-or-append / .set-or-replace / .set / .replace
从存储引入
.ingest
流程说明 ADF 从源数据存储获取数据,将数据转换为表格格式,并执行所需的架构映射更改。 然后,ADF 将数据上传到 Azure Blob,将其拆分为区块,再下载 Blob 以将它们引入 Azure 数据资源管理器表中。
源数据存储 > ADF > Azure Blob > Azure 数据资源管理器
这些命令可以执行查询或 .show 命令,并将查询结果引入表中(“Azure 数据资源管理器”>“Azure 数据资源管理器”)。 此命令通过从一个或多个云存储项目“提取”数据,将数据引入表中。
支持的源数据存储 多种选项 ADLS Gen 2、Azure Blob、SQL(使用 sql_request() 插件)、Azure Cosmos DB(使用 cosmosdb_sql_request 插件),以及提供 HTTP 或 Python API 的任何其他数据存储。 Filesystem、Azure Blob 存储、ADLS Gen 1、ADLS Gen 2
“性能” 引入内容将会排队并受到管理,确保实现小规模的引入,并通过提供负载均衡、重试和错误处理来确保高可用性。
  • 这些命令并不旨在用于导入大量数据。
  • 它们可按预期方式运行,且成本低廉。 但是,对于生产方案以及在流量速率和数据量较大时,请使用复制活动。
服务器限制
  • 无大小限制。
  • 最大超时限制:每个引入 Blob 一小时。
  • 只有查询部分存在大小限制,可通过指定 noTruncation=true 来跳过该限制。
  • 最大超时限制:一小时。
  • 无大小限制。
  • 最大超时限制:一小时。

提示

  • 将数据从 ADF 复制到 Azure 数据资源管理器时,请使用 ingest from query 命令。
  • 对于大型数据集 (> 1 GB),请使用复制活动。

所需的权限

下表列出了执行与 Azure 数据工厂集成的各个步骤所需的权限。

步骤 操作 最低权限级别 注释
创建链接服务 数据库导航 数据库查看者
使用 ADF 的已登录用户需获得授权才能读取数据库元数据。
用户可以手动提供数据库名称。
测试连接 数据库监视者或表引入者
服务主体需获得授权才能执行数据库级别的 .show 命令或表级别的引入。
  • TestConnection 验证与群集的连接,而不验证与数据库的连接。 即使数据库不存在,此命令也可能会成功。
  • 拥有表管理员权限并不足够。
创建数据集 表导航 数据库监视者
使用 ADF 的已登录用户必须获得授权才能执行数据库级别的 .show 命令。
用户可以手动提供表名称。
创建数据集复制活动 预览数据 数据库查看者
服务主体必须获得授权才能读取数据库元数据。
导入架构 数据库查看者
服务主体必须获得授权才能读取数据库元数据。
如果 Azure 数据资源管理器是表格到表格复制的源,ADF 会自动导入架构,即使用户未显式导入架构也是如此。
Azure 数据资源管理器作为接收器 创建按名称的列映射 数据库监视者
服务主体必须获得授权才能执行数据库级别的 .show 命令。
  • 所有必需的操作使用“表引入者”角色。
  • 某些可选操作可能会失败。
  • 在表中创建 CSV 映射
  • 删除映射
表引入者或数据库管理员
服务主体必须获得授权才能对表进行更改。
引入数据 表引入者或数据库管理员
服务主体必须获得授权才能对表进行更改。
Azure 数据资源管理器作为源 执行查询 数据库查看者
服务主体必须获得授权才能读取数据库元数据。
Kusto 命令 根据每个命令的权限级别。

性能

如果 Azure 数据资源管理器是源,而你使用包含 where 查询的查找、复制或命令活动,请参阅查询最佳做法了解性能信息,并参阅复制活动的 ADF 文档

本部分介绍如何使用将 Azure 数据资源管理器用作接收器的复制活动。 Azure 数据资源管理器接收器的估计吞吐量为 11-13 MBps。 下表详细描述了影响 Azure 数据资源管理器接收器性能的参数。

参数 注释
组件的地理邻近性 将所有组件放在同一区域:
  • 源和接收器数据存储。
  • ADF 集成运行时。
  • 你的 Azure 数据资源管理器群集。
确保至少你的集成运行时与 Azure 数据资源管理器群集位于同一区域。
DIU 数 ADF 使用的每 4 个 DIU 有 1 个 VM。
仅当源是包含多个文件的基于文件的存储时,增加 DIU 才有作用。 然后,每个 VM 将并行处理一个不同的文件。 因此,复制单个大文件比复制多个小文件的延迟更高。
Azure 数据资源管理器群集的数量和 SKU Azure 数据资源管理器节点的数量越多,引入处理的时间越长。 使用 dev SKU 会严重限制性能
并行度 若要从数据库中复制大量数据,请将数据分区,然后使用 ForEach 循环并行复制每个分区,或者使用“从数据库批量复制到 Azure 数据资源管理器”模板。 注意:复制活动中的“设置”>“并行度”与 Azure 数据资源管理器无关 。
数据处理复杂性 延迟根据源文件格式、列映射和压缩而有所不同。
运行集成运行时的 VM
  • 对于 Azure 复制,无法更改 ADF VM 和计算机 SKU。
  • 对于本地到 Azure 的复制,请确定托管自承载 IR 的 VM 是否足够强大。

提示和常见错误

监视活动进度

  • 监视活动进度时,“写入的数据”属性可能比“读取的数据”属性要大得多,因为“读取的数据”是根据二进制文件大小计算的,而“写入的数据”是在反序列化并解压缩数据后,根据内存中大小计算的。

  • 监视活动进度时,可以看到数据已写入 Azure 数据资源管理器接收器。 查询 Azure 数据资源管理器表时,会看到数据尚未抵达。 这是因为,复制到 Azure 数据资源管理器的过程是分两个阶段完成的。

    • 第一阶段读取源数据,将数据拆分为 900-MB 的区块,然后将每个区块上传到 Azure Blob。 ADF 活动进度视图会显示第一阶段。
    • 将所有数据上传到 Azure Blob 后,第二个阶段随即开始。 群集节点下载 Blob,并将数据引入接收器表。 然后,Azure 数据资源管理器表中会显示这些数据。

因转义不当而无法引入 CSV 文件

Azure 数据资源管理器要求 CSV 文件遵循 RFC 4180。 它要求:

  • 包含需要转义的字符(例如 " 和新行)的字段应以 " 字符开头和结尾,不使用空格。 字段中的所有 " 字符都使用双 " 字符 ( "" ) 进行转义。 例如, "Hello, ""World""" 是一个有效的 CSV 文件,所包含的单个记录有一个内容为 Hello, "World" 的列或字段。
  • 文件中的所有记录必须有相同的列数和字段数。

Azure 数据工厂允许反斜杠(转义)字符。 如果使用 Azure 数据工厂生成一个包含反斜杠字符的 CSV 文件,则无法将该文件引入 Azure 数据资源管理器。

示例

以下文本值:Hello, "World"
ABC DEF
"ABC\D"EF
"ABC DEF

应该会在相应的 CSV 文件中显示如下:"Hello, ""World"""
"ABC DEF"
"""ABC\D""EF"
"""ABC DEF"

通过使用默认转义字符(反斜杠),以下 CSV 将能用于 Azure 数据资源管理器:"Hello, "World""
"ABC DEF"
""ABC\D"EF"
""ABC DEF"

嵌套的 JSON 对象

将 JSON 文件复制到 Azure 数据资源管理器时,请注意:

  • 不支持数组。
  • 如果 JSON 结构包含对象数据类型,Azure 数据工厂会将对象的子项平展,并尝试将每个子项映射到 Azure 数据资源管理器表中的不同列。 若要将整个对象项映射到 Azure 数据资源管理器中的单个列,请执行以下操作:
    • 将整个 JSON 行引入 Azure 数据资源管理器中的单个动态列。
    • 使用 Azure 数据工厂的 JSON 编辑器手动编辑管道定义。 在“映射”中,执行以下操作:
      • 删除为每个子项创建的多个映射,并添加单个可将对象类型映射到表列的映射。
      • 在右方括号后面添加一个逗号,后跟:
        "mapComplexValuesToString": true

复制到 Azure 数据资源管理器时指定其他属性

可以通过在管道的复制活动中指定其他引入属性来添加这些属性。

添加属性

  1. 在 Azure 数据工厂中,选择“创作”铅笔图标。

  2. 在“管道”下,选择要添加其他引入属性的管道。

  3. 在“活动”画布中,选择“复制数据”活动。

  4. 在活动详细信息中,选择“接收器”,然后展开“其他属性”。

  5. 选择“新建”,根据需要选择“添加节点”或“添加数组”,然后指定引入属性名称和值。 重复此步骤以添加更多属性。

  6. 完成后保存并发布管道。

下一步