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 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们 ...
随机推荐
- P1955【绿】
这道题是标准的"离散化+并查集"模版题,通过这道题彻底理解了并查集,同时还意识到了我之前一直用map来实现离散化的方法其实是最简单但是最慢的方法,以这道题为例,map导致时间消耗有 ...
- sql语句内变量的使用
0.原始表格如下: 1.定义变量,并在sql语句内查询: set @user_name = "成龙";SELECT * FROM `tb_user` where userName ...
- 通过 Feign 进行文件上传
转载请注明出处: 项目为spring cloud 项目,项目中对各部分能力业务进行了拆分,将公共的服务能力放在一个模块当中,通过 Feign 的方式 进行调用,feign 调用的本质还是http内部通 ...
- Gradle 出现 Could not resolve gradle
Gradle 在进行 sync 的时候会出现 Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could n ...
- [转帖]003、体系结构之TiKV持久化
TiKV架构和作用 数据持久化 分布式一致性 MVCC 分布式事务 Coprocessor coprocessor : 协同处理器. 可以将一些SQL计算交给TiKV处理.不需要将TiKV所有数据通过 ...
- [转帖]Linux—vi/vim批量注释及取消注释
https://www.jianshu.com/p/45c252e9d2b6 应用场景 在开发场景中,经常遇到对一些配置文件进行注释,当然如果确定不用的时候我们可以通过vim中的D命令进行删除.当 ...
- [转帖]ChatGPT研究框架(2023)
https://www.eet-china.com/mp/a226595.html ChatGPT是基于OpenAI公司开发的InstructGPT模型的对话系统,GPT系列模型源自2017年诞生的T ...
- 【转帖】训练中文LLaMA大规模语言模型
https://zhuanlan.zhihu.com/p/612752963?utm_id=0 https://github.com/CVI-SZU/Linlygithub.com/CVI-SZU/ ...
- [转帖]Linux块层技术全面剖析-v0.1
Linux块层技术全面剖析-v0.1 perftrace@gmail.com 前言 网络上很多文章对块层的描述散乱在各个站点,而一些经典书籍由于更新不及时难免更不上最新的代码,例如关于块层的多队列.那 ...
- [转帖]centos7 firewall-cmd主机之间端口转发
目录 1. firewalld 1.1 firewalld守护进程 1.2 控制端口/服务 1.3 伪装IP 1.4 端口转发 2. 案例 2.1 配置ServerA 2.2 安装nginx测试 (可 ...