一、概要
在实际项目场景中,通常需要通过Web接口接收数据并写入数据库。本文以 Kettle Carte服务 为核心,实现以下功能:
1.通过web接口接收Json字符串数据。
2.通过解析Json并对数据数据转换。
3.将解析转换后的数据写入Postgres数据库。
二、环境准备
1. pdi8.3-data-integration
2. postgres数据库 且已创建对应的数据库表
3. Postman:用于接口请求调用测试
4. Carte服务:Kettle内置的轻量级Web服务
创建表:
CREATE TABLE public.patient_info (
out_patient_id VARCHAR(20) PRIMARY KEY,
patient_name VARCHAR(50),
birth_date DATE,
sex_code INT,
id_no VARCHAR(18),
home_address TEXT,
medicare_card_no VARCHAR(20),
source_app VARCHAR(20)
);
三、实现步骤
- 编写Kettle转换(.ktr文件)
1.1 创建转换文件
打开Kettle → 文件 → 新建 → 转换。
保存为 test_web_insert_patient.ktr。
2 配置输入与参数解析
可通过获取变量
组件接收JSON字符串数据,接收 varJson 参数并存储为变量 ${reqJson}。
步骤2:JSON解析
使用 JSON Input
组件解析 varJson,获取字段属性值,并转递到下一组件。
使用 JSON output
组件解析 varJson,获取字段属性值,用于请求响应,便于数据注册者判断 数据是否注册成功
3.写入数据库
通过 JSON Input
组件解析 varJson 后,使用 插入/更新
组件实现数据的注册落库。
ktr 测试 如图所示:
四、启动Carte服务
Windows
#进入kettle 安装目录 执行cmd 打开终端
执行 :
Carte.bat 127.0.0.1 8090
确认是否启动成功:
linux
# 进入Kettle安装目录
cd /opt/pentaho/data-integration
# 启动Carte服务
./carte.sh 127.0.0.1 8080
五、Postman接口测试
Carte服务地址:http://127.0.0.1:8090/kettle/executeTrans
1.测试数据:
[{"is_synchronous":"0","out_patient_id":"K05644935","in_patient_id":"","patient_name":"张三","birth_date":"2020-07-06","sex_code":2,"id_no":"421122020706056561","contact_name":"张少","contact_phone":"","nation_name":"","home_address":"上海市","temporary_card_no":"K05644935","medicare_card_no":"K05644935","source_app":"zz_his","source_id":"AW3NG15NY1","source_org_code":"21885100600"}]
2.测试效果:
数据落库效果:
六、常见问题解决
1.如Postman调用提示’The transformation path test_web_insert_patient.ktr is invalid, and will not run successfully’表示 找打不到调用的ktr,确认test_web_insert_patient.ktr文件是否与Carte.bat在同级目录
。
2.启动Carte.bat服务后,无法打开ETL工具,可编辑修改Spoon.bat
端口。
3.Carte.bat服务启动失败,确认端口是否被占用
检查端口是否被占用 : netstat -ano | findstr 8080
终止占用进程(windows):taskkill /PID <进程ID> /F
4.JSON字符串解析失败,检查JSON字符串格式是否存在问题
小结
本文详细介绍了如何配置Kettle的Carte服务,创建转换文件,处理JSON字符串数据,以及通过Postman进行测试。步骤包括环境准备、编写转换、启动Carte服务、接口测试和数据验证。希望本文的案例在日常项目中能对大家有所帮助,如有疑问请留言。