You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logic Apps中捕获ADF各Databricks Notebook活动的时间并展示时间差

解决方案:捕获ADF中Databricks Notebook运行时间并在Logic Apps邮件中展示

一、在ADF中捕获单个Notebook的运行时间

ADF会自动记录每个活动的运行元数据,直接通过活动输出或管道变量提取即可:

  • 为每个Databricks Notebook活动创建对应的管道变量(字符串类型),比如Notebook1_StartTime、Notebook1_EndTime。
  • 在Notebook活动的成功后操作中,将活动的开始/结束时间赋值给变量:
    • 赋值Notebook1_StartTime:@activity('Notebook1').output.runStartTime
    • 赋值Notebook1_EndTime:@activity('Notebook1').output.runEndTime
  • 重复此步骤,为所有Notebook活动配置对应的时间变量。

二、将时间数据传递至Logic Apps

有两种常用方式传递数据:

方式1:直接通过ADF的Logic Apps连接器传递参数

在ADF管道末尾添加Logic Apps活动,构造包含所有Notebook时间信息的JSON作为输入:

{
  "notebookRuns": [
    {
      "name": "Notebook1",
      "startTime": "@variables('Notebook1_StartTime')",
      "endTime": "@variables('Notebook1_EndTime')"
    },
    {
      "name": "Notebook2",
      "startTime": "@variables('Notebook2_StartTime')",
      "endTime": "@variables('Notebook2_EndTime')"
    }
  ]
}

方式2:通过ADF REST API在Logic Apps中拉取数据

如果不想在ADF中维护大量变量,可在Logic Apps中调用ADF的Get Activity Runs API:

  • 在Logic Apps中配置ADF服务连接,确保服务主体拥有ADF的Reader权限。
  • 使用HTTP动作调用API:GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/pipelineruns/{runId}/activityruns?api-version=2018-06-01
  • 传入管道运行ID(可通过ADF管道的@pipeline().RunId传递给Logic Apps),获取所有活动的运行日志后筛选出Databricks Notebook的记录。

三、在Logic Apps中计算时长并生成邮件

  1. 解析输入数据:
    • 如果是通过参数传递的JSON,使用Parse JSON动作解析notebookRuns数组,提前生成JSON schema以确保字段匹配。
    • 如果是API返回的数据,同样解析返回的value数组,筛选出activityType为DatabricksNotebook的记录。
  2. 计算运行时长:
    对每个Notebook的时间对,用ticks函数计算时间差(转成秒数),再格式化为时分秒:
    • 计算总秒数:@div(sub(ticks(items('Apply_to_each')?['endTime']), ticks(items('Apply_to_each')?['startTime'])), 10000000)
    • 格式化为可读字符串:
      @concat(
        string(div(variables('TotalSeconds'), 3600)), '小时 ',
        string(mod(div(variables('TotalSeconds'), 60), 60)), '分钟 ',
        string(mod(variables('TotalSeconds'), 60)), '秒'
      )
      
    使用Apply to each循环处理每个Notebook数据,将计算结果存入变量。
  3. 构建邮件正文:
    用Compose动作拼接HTML表格,展示所有Notebook的运行信息:
    <h3>Databricks Notebook运行统计报告</h3>
    <table style="border-collapse: collapse; width: 100%;">
      <tr>
        <th style="border:1px solid #ddd; padding:8px;">Notebook名称</th>
        <th style="border:1px solid #ddd; padding:8px;">开始时间</th>
        <th style="border:1px solid #ddd; padding:8px;">结束时间</th>
        <th style="border:1px solid #ddd; padding:8px;">运行时长</th>
      </tr>
      <tr>
        <td style="border:1px solid #ddd; padding:8px;">@{items('Apply_to_each')?['name']}</td>
        <td style="border:1px solid #ddd; padding:8px;">@{items('Apply_to_each')?['startTime']}</td>
        <td style="border:1px solid #ddd; padding:8px;">@{items('Apply_to_each')?['endTime']}</td>
        <td style="border:1px solid #ddd; padding:8px;">@{variables('FormattedDuration')}</td>
      </tr>
    </table>
    
  4. 发送邮件:
    使用Office 365 Outlook或其他邮件连接器,将Compose生成的HTML作为邮件正文,设置主题、收件人等参数后发送。

关键注意事项

  • 确保时间格式为ISO 8601(如2024-05-20T14:30:00Z),避免计算时出现格式错误。
  • 若使用API拉取数据,注意ADF的API调用限额,避免触发限流。
  • 如需展示本地时区时间,可在Logic Apps中使用Convert Time Zone动作转换时间格式。

内容的提问来源于stack exchange,提问作者Rohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:09:24