本文分享自华为云社区《DataArts Studio 通过Rest Client 接口读取RESTful接口数据的能力,通过Hive-SQL存储》,作者: 张浩奇 。

Rest Client 提供了读取RESTful接口数据的能力。Rest Client从RESTful地址中获取数据,转换为数据集成支持的数据类型,然后传递给下游的hive-sql节点存储。本文POST接口典型场景为例,为您示例如何使用Rest Client,从RESTful地址中读取数据并同步到hive表中。

本文指导从RESTful地址中读取数据并同步到MRS-Hive表中。大致方案,DataArtStudio 管理配置采集任务,通过CDM服务进行代理下发和第三方API服务器进行对接,响应消息通过节点间参数传递给MSR-Hive-SQL解析入库,

集成流程如下:

方案开发流程如下:

步骤1:DataArtsStudio 创建Rest Client任务

数据开发模块,创建Rest Client节点,输入GET/POST参数,包括认证方式,头域、请求参数/消息体

其中请求消息体中json可以使用EL表达式,比如携带时间过滤参数

JSON Body体

{

"startTime":"#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),"yyyy-MM-dd")}",

"endTime":"#{DateUtil.format(DateUtil.now(),"yyyy-MM-dd")}"

}

系统转换后参数如下:

{

"startTime":"2023-07-11",

"endTime":"2023-07-12"

}

EL表达式的详细参考如下:

https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0494.html

响应消息的JSON中返回的消息如下数组格式:

Response body:

{"data":

[

{

"id":99467,

"proportionProjectId":"0405",

"proportionProjectName":"外勤津贴",

"proportionAfterTax":40800,

"proportionDepartmentId":289,

"proportionDepartmentName":"总所税务部",

"voucherStatusTime":1600758794000,

"billsNumber":"2020092299467"

},

{

"id":102000,

"proportionProjectId":"040102",

"proportionProjectName":"040102 _ 职能部门员工年薪",

"proportionAfterTax":20000,

"proportionDepartmentId":296,

"proportionDepartmentName":"总所创客部",

"voucherStatusTime":1606209149000,

"billsNumber":"2020112402000"

}

]

}

步骤2:MSR-Hive创建表

CREATE TABLE IF NOT EXISTS mrs_hive_rest

(

`billsNumber` STRING

,`proportionDepartmentId` BIGINT

,`voucherStatusTime` BIGINT

,`proportionProjectId` STRING

,`proportionAfterTax` BIGINT

,`id` BIGINT

,`proportionProjectName` BIGINT

,`proportionDepartmentName` STRING

);

步骤3:DataArtsStudio 创建hive-sql脚本用于存储POST接口的响应消息

数据开发模块创建hive-sql脚本,例如:

-- HIVE sql

-- ******************************************************************** --

-- author: zhanghaoqi

-- create time: 2023/07/12 15:50:41 GMT+08:00

-- ******************************************************************** --

SELECT * FROM mrs_hive_rest;

INSERT INTO mrs_hive_rest SELECT json_tuple(json, 'billsNumber', 'proportionDepartmentId', 'voucherStatusTime', 'proportionProjectId', 'proportionAfterTax', 'id', 'proportionProjectName', 'proportionDepartmentName') FROM (

SELECT explode(split(regexp_replace(regexp_replace('${jsonStr}', '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;'))

as json) t;

SELECT * FROM mrs_hive_rest;

SQL脚本关键点说明,在脚本中引用**${jsonStr}** 作为响应的消息的JSON字符串进行解析(在步骤4中定义改参数内容)

由于响应消息是JSON数组,使用了内置的json和字符串方法进行解析。

步骤4:DataArtsStudio 创建hive-sql节点执行脚本

创建hive-sql节点,执行步骤3脚本

参数关键点:脚本参数会自动提取SQL脚本中引用的参数,此处需要配置参数的内容,参数使用EL表达式获取前一个Rest_Client节点的返回值 #{JSONUtil.toString(JSONUtil.path(Job.getNodeOutput("Rest_Client_1729"),"data"))} 其中Rest_Client_1729为前一个节点的任务名,data为前一个节点的数据路径。

步骤5:配置完成后执行测试运行验证脚本

配置完成后,测试运行脚本,通过查看日志确认内容是否符合预期,SQL入库是否成功。

[2023/07/12 20:13:24 GMT+0800] [INFO] Connect to server successfully

[2023/07/12 20:13:24 GMT+0800] [INFO] Executing SQL:SELECT * FROM mrs_hive_rest;

[2023/07/12 20:13:24 GMT+0800] [INFO] Execute SQL successfully

[2023/07/12 20:13:24 GMT+0800] [INFO] Reading SQL execution result

[2023/07/12 20:13:24 GMT+0800] [INFO] The first 0 rows:

[2023/07/12 20:13:24 GMT+0800] [INFO] Read SQL execution result successfully

[2023/07/12 20:13:24 GMT+0800] [INFO]

[2023/07/12 20:13:24 GMT+0800] [INFO] Executing SQL:INSERT INTO mrs_hive_rest SELECT json_tuple(json, ‘billsNumber’, ‘proportionDepartmentId’, ‘voucherStatusTime’, ‘proportionProjectId’, ‘proportionAfterTax’, ‘id’, ‘proportionProjectName’, ‘proportionDepartmentName’) FROM (

SELECT explode(split(regexp_replace(regexp_replace(’[{“billsNumber”:“2020092299467”,“proportionDepartmentId”:289,“voucherStatusTime”:1600758794000,“proportionProjectId”:“0405”,“proportionAfterTax”:40800,“id”:99467,“proportionProjectName”:“外勤津贴”,“proportionDepartmentName”:“总所税务部”},{“billsNumber”:“2020112402000”,“proportionDepartmentId”:296,“voucherStatusTime”:1606209149000,“proportionProjectId”:“040102”,“proportionAfterTax”:20000,“id”:102000,“proportionProjectName”:“040102 _ 职能部门员工年薪”,“proportionDepartmentName”:“总所创客部”}]’, ‘\[|\]’,’’),’\}\,\{’,’\}\;\{’),’\;’))

as json) t;

[2023/07/12 20:13:38 GMT+0800] [INFO] Execute SQL successfully

[2023/07/12 20:13:38 GMT+0800] [INFO] Reading SQL execution result

[2023/07/12 20:13:38 GMT+0800] [INFO] Read SQL execution result successfully

[2023/07/12 20:13:38 GMT+0800] [INFO]

[2023/07/12 20:13:38 GMT+0800] [INFO] Executing SQL:SELECT * FROM mrs_hive_rest;

[2023/07/12 20:13:38 GMT+0800] [INFO] Execute SQL successfully

[2023/07/12 20:13:38 GMT+0800] [INFO] Reading SQL execution result

[2023/07/12 20:13:38 GMT+0800] [INFO] The first 2 rows:

2020092299467,289,1600758794000,0405,40800,99467,null,总所税务部

2020112402000,296,1606209149000,040102,20000,102000,null,总所创客部

[2023/07/12 20:13:38 GMT+0800] [INFO] Read SQL execution result successfully

[2023/07/12 20:13:38 GMT+0800] [INFO]

确认脚本执行成功,入库成功。

【云咖问答】第2期 华为云大咖架构师坐阵,与你共话应用创新,提问互动赢开发者定制礼品~https://bbs.huaweicloud.com/forum/thread-0234124103999807029-1-1.html

点击关注,第一时间了解华为云新鲜技术~

DataArts Studio实践丨通过Rest Client 接口读取RESTful接口数据的能力的更多相关文章

  1. 使用client对象模型读取SharePoint列表数据

    使用client对象模型读取SharePoint列表数据 client对象模型提供了强有力的方式.从远程client应用程序管理列表. 1. 管理员身份打开VS,新建项目Windows窗口应用程序,命 ...

  2. 【快学springboot】2.Restful简介,SpringBoot构建Restful接口

    Restful简介 Restful一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现 ...

  3. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  4. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了And ...

  5. React Native入门——布局实践:开发京东client首页(一)

    有了一些对React Native开发的简单了解,让我们从实战出发.一起来构建一个简单的京东client. 这个client是仿照之前版本号的京东client开发的Android版应用,来源于CSDN ...

  6. Spring Boot提供RESTful接口时的错误处理实践

    使用Spring Boot开发微服务的过程中,我们会使用别人提供的接口,也会设计接口给别人使用,这时候微服务应用之间的协作就需要有一定的规范. 基于rpc协议,我们一般有两种思路:(1)提供服务的应用 ...

  7. 【干货】如何通过OPC自定义接口来实现客户端数据的读取?

    上篇博文分享了我的知识库,被好多人关注,受宠若惊.今天我把我在项目中封装的OPC自定义接口的程序分享一下.下面将会简单简单介绍下OPC DA客户端数据访问,以及搭配整个系统的运行环境. OPC(OLE ...

  8. [转]简单识别 RESTful 接口

         本文描述了识别一个接口是否真的是 RESTful 接口的基本方法.符合 REST 架构风格的接口,称为 RESTful 接口.本文不打算从架构风格的推导方面描述,而是从 HTTP 标准的方面 ...

  9. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  10. Restful接口调用方法超详细总结

    由于在实际项目中碰到的restful服务,参数都以json为准.这里我获取的接口和传入的参数都是json字符串类型.发布restful服务可参照文章http://www.cnblogs.com/jav ...

随机推荐

  1. oracle逻辑备份exp导出指定表名时需要加括号吗?

    Oracle 的exp.imp.expdp.impdp命令用于数据库逻辑备份与恢复; exp命令用于把数据从远程数据库server导出至本地,生成dmp文件. 笔者在实操中遇到: $exp user/ ...

  2. 【总结】浅刷leetcode,对于位运算提高性能的一些总结

    目录 什么是位运算? 位运算技巧 1. 判断奇偶性 2. 交换两个数 3. 判断一个数是否是2的幂次方 4. 取绝对值 5. 计算平均数 结论 位运算技巧是计算机科学中非常重要的一部分,它可以用来解决 ...

  3. js对象方法大全

    JavaScript中Object构造函数的方法 Object构造函数的方法节 Object.assign() 通过复制一个或多个对象来创建一个新的对象. Object.create() 使用指定的原 ...

  4. IE不兼容问题 字符串格式化

    Js现在支持高级语法,字符串格式化 alert(`aaaa${content}`); 我们使用一段完整的html来打开测试下: 1 <!DOCTYPE html> 2 <html&g ...

  5. 中国剩余定理(CRT)学习笔记

    约定 \(A\perp B\) 表示 \(\gcd(A,B)=1\). \(A\mid B\) 表示 \(B\equiv 0\pmod{A}(A\neq0)\). 引入 考虑以下这道题: 有物不知其數 ...

  6. C++ Primer 5th 阅读笔记:变量和基本类型

    一些语言的公共特性 内建类型,如整型,字符型等: 变量,为值绑定的一个名字: 表达式和语句,操作值. 分支和循环,允许我们条件执行和重复执行: 函数,定义抽象计算单元. 扩展语言的方式 自定义类型: ...

  7. Websocket 60秒断开,连接不稳定

    本地测试都是正常的,线上测试总是过一会就断开... 线上新增了https协议,导致页面中的链接必须也是ssl Websocket链接地址从ws://ws.xxx.com改成了wss://ws.xxx. ...

  8. 【H5】Emmet 指令 HTML

    Emmet操作指南 HTML篇 生成带有内容的标签 标签名{内容}可以生成带有内容的标签 div{abc} <div>abc</div> 生成带有属性的标签 生成带有class ...

  9. 2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti,

    2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号. 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti, ...

  10. 2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg

    2022-09-29:在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密. 同时给你一个整数 forg ...