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

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

先决条件

创建新管道

  1. 选择“创作”铅笔图标。

  2. 选择 +,然后从下拉菜单中选择“管道”,以创建新的管道。

    create new pipeline.

创建 Lookup 活动

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

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

    select lookup activity.

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

    edit lookup activity.

    提示

    单击画布中的空白区域可查看管道属性。 使用“常规”选项卡可将管道重命名。 示例中的管道命名为 pipeline-4-docs

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

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

    add dataset in lookup settings.

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

    select new dataset.

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

    lookup settings with Azure Data Explorer dataset.

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

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

    Edit Azure Data Explorer dataset properties.

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

     Azure Data Explorer new linked service.

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

    数据集现已准备就绪,接下来可以继续编辑管道。

将查询添加到 Lookup 活动

  1. 在“pipeline-4-docs”>“设置”中的“查询”文本框内添加一个查询,例如:

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

    Final settings of lookup activity.

创建 For-Each 活动

For-Each 活动用于循环访问集合,并在循环中执行指定的活动。

  1. 现在,将 For-Each 活动添加到管道。 此活动将处理 Lookup 活动返回的数据。

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

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

      ForEach activity.

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

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

    • 设置“批计数”。

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

      ForEach activity settings.

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

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

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

    Azure Data Explorer command activity.

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

    azure data explorer command activity connection tab.

  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 活动结果中每一行的数据库列。 “命令超时”可保持不变。

    command activity.

    注意

    命令活动具有以下限制:

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

    Azure Data Explorer command pipeline.

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

    azure data explorer command activity output.

  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 
        } 
    ] 
} 

异步管理命令的返回值

在异步管理命令中,活动在幕后将不断轮询操作表,直到异步操作完成或超时。因此,返回的值将包含给定 OperationId 属性的 .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>" 
        } 
    ] 
}