Azure Data Factory(十二)传参调用 Azure Function
一,引言
在实际的项目中,Azure Data Factroy 中的 Data Flow 并不能彻底帮我们完成一系列复制逻辑计算, 比如我们需要针对数据集的每一行数据进行判断计算,Data Flow 就显的有些吃力。别怕,Azure Data Factory 提供了调用 Azure Function 的组件,有了代码的加持,那么解决更复杂的都能迎刃而解!!那么就开始今天的表演吧
二,正文
1,准备 Azure Function
打开 Azure Portal ,点击 "Create a resource" 快速创建 Azure Function

以下就是刚创建好的 Azure Function,Operating System 选择 "Windows",Runtime 选择:"node js"

添加 名字为 “Http_skip_holiday” 的 Function

Function Code:
1 const intercept = require("azure-function-log-intercept");
2
3 module.exports = async function (context, req) {
4 context.log('JavaScript HTTP trigger function processed a request.');
5 intercept(context);
6 let lo_date = (req.query.lo_date || (req.body && req.body.lo_date));
7 let skipday = (req.query.skipday || (req.body && req.body.skipday));
8 context.log("req.body:"+req.body);
9 context.log("lo_date:"+req.body.lo_date);
10 context.log("req.body:"+req.body.skipday);
11 //server Info
12
13 // Holiday Handling
14 let holidayArray = ['2023-01-01','2023-01-06','2023-01-07','2023-01-13','2023-01-14','2023-01-21','2023-01-27','2023-01-28'];
15 context.log("holidayArray.length: ", holidayArray.length);
16
17 let due_dateObj= calculate_dueDate(context,lo_date,holidayArray,skipday)
18 context.log("due_dateObj.Step: ", due_dateObj.Step);
19 context.res = {
20 status: 200, /* Defaults to 200 */
21 body: due_dateObj
22 };
23 }
24
25 function calculate_dueDate(context,lodate, holidayArray, num) {
26 "use strict";
27 let DueDateObj={};
28 let lo_date = new Date(lodate);
29 let Year = lo_date.getFullYear();
30 let Month = lo_date.getMonth();
31 let day = lo_date.getDate();
32
33 let dueDate;
34 let step = num;
35 let isWorkDay = false;
36 do {
37
38 let currentDate = new Date(Year, Month, day + step);
39
40 if (currentDate.toDateString() in holidayArray || (currentDate.getDay() < 1)) {
41 step++;
42 } else {
43 isWorkDay = true;
44 }
45 } while (!isWorkDay);
46
47
48 dueDate = new Date(Year, Month, day + step);
49 DueDateObj.DueDate=dueDate.toString("yyyy-MM-dd");
50 DueDateObj.Step=step;
51 context.log("dueDate:"+dueDate.toString("yyyy-MM-dd"));
52 return DueDateObj;
53 }
开启 Function 后,,我们使用 Postman 进行测试
注意:1)打开 Function 的 Filesystem Logs

2)如果Function 的访问基本不是 "" 那么就得在调用 Function 的 Url 后面加上验证身份的 Code


Postman 进行结果测试

2,Data Factory 中配置调用 Function
1)使用 LookUp 查询需要更新的数据集
2)利用 Foreach 循环编辑数据集,并根据每一天数据的 "inputdate","skipday" 作为参数调用 Azure Function

Foreach 的数据集合:

@activity('Lookup_Data').output.value
Function 的 Body 参数配置

@concat('{"lo_date":"',item().inputdate,'","skipday":',item().skipday,'}')
pipeline code
{
"name": "test_pipeline",
"properties": {
"activities": [
{
"name": "Lookup_Data",
"type": "Lookup",
"dependsOn": [],
"policy": {
"timeout": "0.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"source": {
"type": "DelimitedTextSource",
"storeSettings": {
"type": "AzureBlobStorageReadSettings",
"recursive": true,
"wildcardFolderPath": "AAA",
"wildcardFileName": {
"value": "@concat('User_*.csv')",
"type": "Expression"
},
"enablePartitionDiscovery": false
},
"formatSettings": {
"type": "DelimitedTextReadSettings"
}
},
"dataset": {
"referenceName": "AZURE_BLOB_CSV",
"type": "DatasetReference",
"parameters": {
"ContainerName": "test",
"DirectoryPath": "AAA",
"FileName": {
"value": "@concat('User_*.csv')",
"type": "Expression"
}
}
},
"firstRowOnly": false
}
},
{
"name": "ForEach UPDATE Date",
"type": "ForEach",
"dependsOn": [
{
"activity": "Lookup_Data",
"dependencyConditions": [
"Succeeded"
]
}
],
"userProperties": [],
"typeProperties": {
"items": {
"value": "@activity('Lookup_Data').output.value",
"type": "Expression"
},
"activities": [
{
"name": "Azure_Function_SkipHoliday",
"type": "AzureFunctionActivity",
"dependsOn": [],
"policy": {
"timeout": "0.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"functionName": "Http_skip_holiday",
"method": "POST",
"body": {
"value": "@concat('{\"lo_date\":\"',item().inputdate,'\",\"skipday\":',item().skipday,'}')",
"type": "Expression"
}
},
"linkedServiceName": {
"referenceName": "AzureFunction_LinkService",
"type": "LinkedServiceReference"
}
}
]
}
}
],
"annotations": []
}
}
点击 Debug 进行调试

三,结尾
Azure Data Factory(ADF)是Azure中的托管数据集成服务,允许我们迭代地构建、编排和监视您的ETL工作流程。Azure Functions现在已与ADF集成,允许我们在数据工厂管道中运行Azure函数作为步骤。大家多多练习!!!
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Data Factory(十二)传参调用 Azure Function的更多相关文章
- Azure Data Factory(二)复制数据
一,引言 上一篇主要只讲了Azure Data Factory的一些主要概念,今天开始新的内容,我们开始通过Azure DevOps 或者 git 管理 Azure Data Factory 中的源代 ...
- ADF 第一篇:Azure Data Factory介绍
Azure Data Factory(简写 ADF)是Azure的云ETL服务,简单的说,就是云上的SSIS.ADF是基于云的ETL,用于数据集成和数据转换,不需要代码,直接通过UI(code-fre ...
- Azure Data Factory(三)集成 Azure Devops 实现CI/CD
一,引言 由于上一节文章内容过长,无法分享Azure Data Factory 的持续集成,持续发布.今天将着重介绍一下在使用 Azure DevOps Pipeline 发布,自动进行持续集成,并且 ...
- Azure Data Factory(四)集成 Logic App 的邮件通知提醒
一,引言 上一篇有介绍到使用Azure Data Factory 复制数据,然后有集成 Azure DevOps 实现CI/CD,但是对于真正的项目来说,这些肯定是不够的,比如说在执行 Azure P ...
- Azure Data Factory(五)Blob Storage 密钥管理问题
一,引言 之前讲解的ADF 集成Azure DevOps 实现CI/CD,在 Releases Pipeline 阶段,我们是将两个 Blob Storage 的链接字符串复制.粘贴到 "O ...
- Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage
一,引言 本篇文章中,我门将学习如何利用 Terraform 将 文件以及文件夹上传到 Azure Blob Storage,这个对于我们来说很方便,可以将一些不重要的内容也存储在源代码管理工具中! ...
- # Python第十节 传参
Python第十节 传参 一. 变量和变量名 首先说明变量名和变量的一点差异 例如: var = [1, 2, 3] `var = "Google" 调用变量var的时候, 既可以 ...
- 使用java传参调用exe并且获取程序进度和返回结果的一种方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序( ...
- Azure Data Factory(一)入门简介
一,引言 今天分享一个新的Azure 服务-----Azure Data Factory(Azure 数据工厂),怎么理解,参考根据官方解释-----数据工厂解释:大数据需要可以启用协调和操作过程以将 ...
- JVM(十二):方法调用
JVM(十二):方法调用 在 JVM(七):JVM内存结构 中,我们说到了方法执行在何种内存结构上执行:Java 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们 ...
随机推荐
- POJ - 1190 生日蛋糕(深搜+神奇的剪枝)
链接:https://ac.nowcoder.com/acm/contest/1015/B 题目描述 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱 ...
- 牛客 | 一起来做题~欢乐赛2 (AK 题解)
补题链接:Here A.新比赛,在眼前. 对于每次猜数和裁判的判断,可以确定一个区间内所有的数都有可能,比如对于样例中(8 +)来说,[ -INT_MIN, 7] 中所有的数都有可能,那么对于每次猜数 ...
- CodeCraft-21 and Codeforces Round #711 (Div. 2) A~C 个人题解
补题链接:Here 1498A. GCD Sum 题意:给定一个 gcdSum 操作:\(gcdSum(762) = gcd(762,7 + 6 + 2) = gcd(762,15) = 3\) 请问 ...
- Xmanager连接linux服务器的桌面
在办公室使用xshell通过22端口访问linux服务器大家都很熟悉,但有的时候在办公室要远程linux服务器上的桌面应用,该如何实现. 环境准备 客户端:win10 服务器:centos7.9 一. ...
- 【TouchGFX】使用v4.18.1版本创建预制电路板工程的正确方法
选择要使用的电路板 实现自己的程序 Designer运行仿真没问题并生成代码 我习惯使用IAR工具,发现直接编译有错误 上述错误是因为Designer默认生成的工具链是CubeIDE,所以需要使用Cu ...
- Docker-01基本命令
1.Docker安装 系统镜像为Centos7.x yum包更新到最新 sudo yum update 安装需要的软件包,yum-util提供yum-config-manager功能.另外两个是dev ...
- [转帖]深入JVM - Code Cache内存池
深入JVM - Code Cache内存池 1. 本文内容 本文简要介绍JVM的 Code Cache(本地代码缓存池). 2. Code Cache 简要介绍 简单来说,JVM会将字节码编译为本地机 ...
- [转帖] TiDB 产品体系介绍
https://www.modb.pro/db/521269#:~:text=%E4%BC%81%E4%B8%9A%E7%89%88%E5%92%8C%E7%A4%BE%E5%8C%BA%E7%89% ...
- [转帖]CentOS7安装笔记:minio分布式集群搭建
文章目录 准备机器 部署(所有机器均执行) 创建挂载磁盘路径 挂载磁盘路径到文件系统 创建minio目录 下载minio安装包 创建启动脚本 创建启动服务 启动测试(所有机器执行) 重新加载服务的配置 ...
- [转帖] Linux命令拾遗-常用的辅助开发类命令
https://www.cnblogs.com/codelogs/p/16060735.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 之前介绍了大量 ...