本文分享自华为云社区《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. 图计算引擎分析--GridGraph

    作者:京东科技 李永萍 GridGraph:Large-Scale Graph Processing on a Single Machine Using 2-Level Hierarchical Pa ...

  2. 5221. 【GDOI2018模拟7.10】A

    题目大意: 给你一棵有根树,问你在这棵树上总共有多少棵子树的节点构成了一个完整的整数区间. 考试想法: 考试时就想到了正解,正解就是从下到上遍历整一棵树,每一个节点记录一下它的最小值min.最大值ma ...

  3. java Stack(栈)类、Queue和Deque队列

    1. java Stack类 特性是:LIFO(后进先出)先进后出,最先进入的在栈底. Stack底层也是通过数组实现的,同时也是线程安全的 Stack stack=new Stack(); //添加 ...

  4. Vue中关于keep-alive的使用

    keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 当组件在keep-alive内被切换时组件的ac ...

  5. [C++基础入门] 5、 数组

    文章目录 5 数组 5.1 概述 5.2 一维数组 5.2.1 一维数组定义方式 5.2.2 一维数组数组名 5.2.3 冒泡排序 5.3 二维数组 5.3.1 二维数组定义方式 5.3.2 二维数组 ...

  6. Centos7.x 安装配置Web性能压力测试工具Siege

    一.简介 Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重 ...

  7. MD5简述及常见解密网址推荐

    什么是md5 MD5(Message-Digest Algorithm 5)(信息-摘要算法5), 一种被广泛使用的[密码散列函数](https://baike.baidu.com/item/密码散列 ...

  8. 在基于nuxt的移动端页面中引用mint UI的popup组件之父子组件传值

    最近在做移动端的wap页面,考虑到要做SEO,所以选定了nuxt+vue+mint ui. 有一个需求是这样的,点击头部菜单栏,出现一个气泡,点击返回首页. 由于一些页面没有统一引用mint的mt-h ...

  9. HTB靶场之-inject

    准备: 攻击机:虚拟机kali. 靶机:Inject,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/machine ...

  10. 2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有

    2021-09-06:给表达式添加运算符.给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+.- 或 * ,返回所有 ...