场景:使用kettle实现将查询结果返回给客户端,也就是说kettle暴露查询接口供外围系统调用。前提必须是使用carte服务才可以提供接口供外部系统调用。具体实操方法如下:
1、设计转换
根据具体需求设计转换,主要用到的步骤有获取变量(从请求参数中获取变量)、json输入(解析入参),json 输出将结果转换为json格式输出到客户端。如下图所示:

2、接收参数
使用获取变量步骤来接收接口请求参数,变量通过{}方法进行获取,如下图{PARAM}则是获取PARAM参数,将参数赋值为req字段。

3、解析参数
本示例中的PARAM参数为{"beginDateTime":"2024-02-04 00:00:00","endDateTime":"2025-02-07 23:59:59"},使用json输入步骤解析该参数,分别获取beginDateTime和endDateTime两个参数,如下图所示:


4、选择有效参数
使用字段选择步骤选择我们需要的字段或者修改元数据(如字段类型等),将有小参数传递给后续步骤表输入。如下图所示:

5、根据参数查询表数据
根据beginDateTime和endDateTime两个参数查询表t1,获取id和name两个字段返回给客户端。
注意:这里sql中的的?是占位符,分别会被beginDateTime和endDateTime两个参数替换,另外从步骤插入数据要选择前置步骤字段选择且勾选执行每一行。

6、将结果输出
使用json output 步骤将结果输出,这里主要是需要将发送结果到Servlet进行勾选。然后定义Json条目名称和输出值字段。

7、设置输出字段
选择我们需要输出的字段,如下图所示:

8、Spoon 测试 转换
点击运行,输入命名参数PARAM模拟接收外部接口参数,先测试转换可以正常运行,如下图所示:

9、postman测试接口
启动carte服务(若对carte服务不了解的参考我前面的文章),使用postman调用/kettle/executeTrans接口,设置rep、trans、level、PARAM参数。
carte有权限控制需设置Auth参数,默认用户名和密码为cluster/cluster


返回结果中文乱码处理
在Windows环境下,返回值会因编码而导致乱码,需要在Kettle的全局配置中添加编码设置,位置 ${KETTLE_HOME}/.kettle/kettle.properties
KETTLE_DEFAULT_SERVLET_ENCODING = UTF-8
