使用 Azure 数据工厂命令活动来运行 Azure 数据资源管理器管理命令

Azure 数据工厂 (ADF)是基于云的数据集成服务,可用于对数据执行活动的组合。 使用 ADF 可以创建数据驱动式工作流用于协调和自动化数据移动与数据转换。 使用 Azure 数据工厂中的 Azure 数据资源管理器命令活动,可以在 ADF 工作流中运行 Azure 数据资源管理器管理命令。 本文介绍如何使用查找活动与包含 Azure 数据资源管理器命令活动的 ForEach 活动来创建一个管道。

先决条件

创建新管道

  1. 选择“作者”铅笔工具。

  2. 通过从下拉列表中选择 + 并选择 “管道 ”来创建新管道。

    创建新管道。

创建查找活动

查找活动可以从任何 Azure 数据工厂支持的数据源中检索数据集。 可以在 ForEach 或其他活动中使用 Lookup 活动的输出。

  1. 活动窗格的常规下,选择Lookup活动。 将其拖放到右侧的主画布中。

    选择 Lookup 活动。

  2. 画布中现在包含了您创建的查询活动。 使用画布下的选项卡更改任何相关参数。 在“常规”中,将活动重命名。

    编辑查找活动。

    提示

    选择空画布区域以查看管道属性。 使用“常规”选项卡可将管道重命名。 管道名为 pipeline-4-docs

在查找活动中创建 Azure 数据资源管理器数据集

  1. 在“设置”中,选择预先创建的 Azure 数据资源管理器“源数据集”,或选择“+ 新建”以创建新的数据集。

    在 Lookup 设置中添加数据集。

  2. 在“新建数据集”窗口中选择“Azure 数据资源管理器(Kusto)”数据集。 选择“继续”以添加新数据集。

    选择新数据集。

  3. 新 Azure 数据资源管理器数据集参数将显示在“设置”中。 若要更新参数,请选择“编辑”。

    使用 Azure 数据资源管理器数据集的查找设置。

  4. 主画布中将打开新选项卡“AzureDataExplorerTable”。

    • 选择“常规”并编辑数据集名称。
    • 选择“连接”以编辑数据集属性。
    • 从下拉列表中选择 “链接服务 ”,或选择“ + 新建 ”以创建新的链接服务。

    编辑 Azure 数据资源管理器数据集属性。

  5. 创建新的链接服务时,将打开“新建链接服务(Azure 数据资源管理器)”页:

    Azure 数据资源管理器的新链接服务。

    • 选择 Azure 数据资源管理器链接服务的名称。 根据需要添加说明
    • 在“通过集成运行时进行连接”中,根据需要更改当前设置。
    • 在“帐户选择方法”中,使用以下两种方法之一选择群集:
      • 选中“从 Azure 订阅”单选按钮,并选择你的 Azure 订阅帐户。 然后选择你的群集。 下拉列表仅列出属于你的群集。
      • 请选中“手动输入”单选按钮,并输入你的终结点(群集 URL)。
    • 指定租户
    • 输入服务主体 ID。 在 Azure 门户中“应用注册>概述>应用程序(客户端)ID”下找到此值。 根据所用命令所需的权限级别,主体必须拥有足够的权限。
    • 选择“服务主体密钥”按钮并输入服务主体密钥
    • 从下拉菜单中选择你的数据库。 或者,选中“编辑”复选框并输入你的数据库名称。
    • 选择“测试连接”以测试创建的链接服务连接。 如果可以连接到设置,将显示绿色复选标记 连接成功
    • 选择“完成”以完成链接服务的创建过程。
  6. 设置链接服务后,在 AzureDataExplorerTable>连接中,添加 名称。 选择“预览数据”,确保数据正确呈现。

    数据集已准备就绪,您可以继续编辑您的流程。

将查询添加到 Lookup 活动

  1. pipeline-4-docs>Settings 中,在 “查询 ”文本框中添加查询,例如:

    ClusterQueries
    | where Database !in ("KustoMonitoringPersistentDatabase", "$systemdb")
    | summarize count() by Database
    
  2. 根据需要,更改“查询超时”“不截断”“仅限于第一行”属性。 在此流程中,保持 查询超时 的默认设置,并取消选中复选框。

    查找操作的最终设置。

创建 For-Each 活动

使用 For-Each 活动遍历集合,并在循环中执行指定活动。

  1. 将 For-Each 活动添加到管道。 此活动处理从查找活动返回的数据。

    • “活动 ”窗格中的 “迭代和条件”下,选择 ForEach 活动。 将其拖放到画布中。

    • 在画布中 Lookup 活动的输出与 ForEach 活动的输入之间绘制一条线,以将其连接起来。

      ForEach 活动。

  2. 在画布中选择 ForEach 活动。 在“设置”选项卡中:

    • 选中“顺序”复选框以按顺序处理 Lookup 结果,或将其保留为未选中状态以创建并行处理。

    • 设置批计数

    • 在“项”中,提供对输出值的以下引用:@activity('Lookup1').output.value

      ForEach 操作设置。

在 ForEach 活动中创建 Azure 数据资源管理器命令活动

  1. 双击画布中的 ForEach 活动,在新画布中将其打开。 指定 ForEach 中的活动。

  2. 在“活动”窗格中的“Azure 数据资源管理器”下,选择“Azure 数据资源管理器命令”活动,并将其拖放到画布中。

    Azure 数据资源管理器命令活动。

  3. “连接 ”选项卡中,选择之前创建的同一链接服务。

    Azure 数据资源管理器命令活动连接选项卡。

  4. 在“命令”选项卡中提供以下命令:

    .export
    async compressed
    into csv h"http://<storageName>.blob.core.chinacloudapi.cn/data/ClusterQueries;<storageKey>" with (
    sizeLimit=100000,
    namePrefix=export
    )
    <| ClusterQueries | where Database == "@{item().Database}"
    

    命令指示 Azure 数据资源管理器将给定查询的结果以压缩格式导出到 Blob 存储中。 该命令以异步方式运行(使用 async 修饰符)。 查询会调用 Lookup 活动结果中每一行所属的数据库列。 可以将 命令超时 保留不变。

    命令操作活动。

    注意

    命令活动具有以下限制:

    • 大小限制:1 MB 响应大小
    • 时间限制:20 分钟(默认),1 小时(最大)。
    • 如果需要,可以使用 AdminThenQuery 将查询追加到结果,以减少生成的大小或时间。
  5. 管道现已准备就绪。 您可以通过选择管道名称返回到主管线视图。

    Azure 数据资源管理器命令管道。

  6. 在发布管道之前选择“调试”。 可以在“ 输出 ”选项卡中监视管道进度。

    Azure 数据资源管理器命令活动输出。

  7. 选择 全部发布,然后选择 添加触发器 以运行管道。

管理命令输出

以下部分介绍命令活动输出的结构。 管道中的下一个活动可以使用此输出。

非异步管理命令的返回值

在非异步管理命令中,返回值的结构类似于 Lookup 活动结果的结构。 该 count 字段显示返回的记录数。 固定数组字段 value 包含记录列表。

{ 
    "count": "2", 
    "value": [ 
        { 
            "ExtentId": "1b9977fe-e6cf-4cda-84f3-4a7c61f28ecd", 
            "ExtentSize": 1214.0, 
            "CompressedSize": 520.0 
        }, 
        { 
            "ExtentId": "b897f5a3-62b0-441d-95ca-bf7a88952974", 
            "ExtentSize": 1114.0, 
            "CompressedSize": 504.0 
        } 
    ] 
} 

异步管理命令的返回值

在异步管理命令中,活动会在后台轮询操作表,直到异步操作完成或超时。因此,返回的值包含该给定.show operations OperationId属性的结果。 请检查“状况”和“状态”属性的值,以确认操作是否成功完成。

{ 
    "count": "1", 
    "value": [ 
        { 
            "OperationId": "910deeae-dd79-44a4-a3a2-087a90d4bb42", 
            "Operation": "TableSetOrAppend", 
            "NodeId": "", 
            "StartedOn": "2019-06-23T10:12:44.0371419Z", 
            "LastUpdatedOn": "2019-06-23T10:12:46.7871468Z", 
            "Duration": "00:00:02.7500049", 
            "State": "Completed", 
            "Status": "", 
            "RootActivityId": "f7c5aaaf-197b-4593-8ba0-e864c94c3c6f", 
            "ShouldRetry": false, 
            "Database": "MyDatabase", 
            "Principal": "<some principal id>", 
            "User": "<some User id>" 
        } 
    ] 
}