kettle从入门到精通 第105课 ETL之kettle 解决api接口无返回页数和记录数的分页问题

场景:

今天下午小朋友和妈妈去游乐园玩了,一个人在家里也挺好,比较清净。学学习充充电,无意中看到赵总群里求助kettle分页问题。想着分页问题已经被我一网打尽了,不料实战时翻车了几次,搞了几次死循环直接内存溢出挂掉。接下来咱们一起来探索下。

1、API接口

接口入参数:token,page(当前页码),rows(每页获取的记录数)

响应参数:success(成功返回true),pagedata数组(无数据时接口返回空数组)

难点:此分页接口不同以往的接口,响应参数中缺少totalPages和totalRecords。

无数据时返回结果如下图所示:

有数据时返回结果如下图所示:

2、设计流程

初始化参数:初始化第一次请求接口的参数

检验字段的值:根据接口响应中pagedata数组是否为空进行判断数据是否已经取完,为空的话跳出循环结束流程,不为空的话继续取数据,直到取完所有数据。

获取数据:根据参数获取数据并且根据响应数据调整循环逻辑控制标记。

3、初始化参数子转换

hasPage:当前请求是否有数据,默认值为1表示继续请求接口获取数据,无数据时此字段会被设置为0

currPage:请求接口时当前页码,默认值为1,会一直进行累加,如1,2,3,4 等

url:初始请求地址,地址的格式为http://xxx.com?page=1\&rows=2\&token=uuuuu,后续步骤会重新更新url中的page值

复制记录到结果:将参数往后续步骤传递

4、校验字段的值

检验:选择上一步结果的字段

字段名:hasPage

类型:String

成功条件:如果值等于1,也就是说如果hasPage的值是1 表示接口有数据,继续读取,否则跳出循环暂定。

5、获取数据子转换

从结果获取记录:从前值步骤获取请求参数

JavaScript(构造参数):重新构建请求参数

Http client:根据构建的请求参数获取数据

JavaScript代码(判断是否还有数据):根据返回的数据pagedata字段重新赋值hasPage

字段选择:只筛选hasPage,currPage,url三个参数往后续传递

Switch/case:根据hasPage字段判断数据是否落库还是空操作

6、保存&运行

调试了几次之后,可以正常work,不会出现死循环情况,完美!!!

写在最后

老铁们,这种场景的分页情况你们还有什么好的方法没,欢迎评论区留言探讨。