Kettle 循环调用接口分页插入数据库(保姆级教程)
Kettle 循环调用接口分页插入数据库(保姆级教程)
前言
最近在做数据同步的需求,对方提供了一个 HTTP 接口,需要把接口返回的数据全部拉取下来存到我们自己的数据库里。数据量还挺大的,一次性返回肯定不行,只能分页调用。
之前没用过 Kettle 做这种场景,折腾了一番总算搞定了,把过程记录下来分享给大家。
一、需求分析
先说下要做什么:
- 调用第三方 HTTP 接口获取数据
- 接口支持分页,每页返回一定数量的数据
- 把所有页的数据都取出来,存到数据库表中
整体思路就是:循环调用接口 → 解析 JSON → 入库,用 Kettle 的转换+作业来实现。
二、具体步骤
步骤 0:接口调用结构

返回参数如下json
{
"code": 0,
"msg": "操作成功",
"data": {
"records": [
{
"id": "000b2bdd2629ef7ea46c0a3ed4bd0d47",
"labelId": "681ae4e632432232a96f42a9df36ce0",
"itemId": "59ff4254231bdca4a176520661",
"createTime": "2026-06-22 12:56:55",
"updateTime": "2026-06-22 12:56:55"
},{}···
],
"total": 6967,
"size": 100,
"current": 1,
"orders": [],
"searchCount": true,
"pages": 70
}
}
打开 Kettle(PDI),新建一个转换,后面所有的数据处理逻辑都在这个转换里完成。

查询总条数

步骤 1:定义变量参数
这一步很关键!我们需要定义几个变量来控制分页:

-
page:当前页码,从 1 开始 -
limit:每页多少条数据 -
total:总页数
右键转换空白处 → 转换设置 → 命名参数,把这些变量定义好。
步骤 2:拖入 HTTP 组件

在左侧核心对象里找到 HTTP client 组件,拖到画布上。这个组件用来发 HTTP 请求。
步骤 3:配置 HTTP 请求

双击 HTTP client 组件进行配置:
URL 地址:
http://xxx/api/data?page=${page}&size=${pageSize}
这里用 ${变量名} 的方式引用我们之前定义的参数。
请求头:
如果接口需要认证,记得在请求头里加上 Token 之类的:
Authorization: Bearer xxx
Content-Type: application/json
步骤 4:添加 JSON Input 解析数据

HTTP 返回的是 JSON 字符串,需要解析。拖入 JSON input 组件,连接到 HTTP client 后面。$.data.total获取总数
步骤 5:获取到总数之后计算页数用JavaScript脚本

步骤 6:设置变量以供后续逻辑使用

步骤 7:检查current_page是否满足循环条件,如果满足则继续

步骤 8:开始具体调用逻辑,跟前置获取total相似,包括数据库保存

步骤 9:更新current_page,通过JavaScript脚本设置变量

// 获取当前变量值(注意:若变量未定义,需先初始化)
var currentPage = parseInt(parent_job.getVariable("current_page"));
var batchSize = parseInt(parent_job.getVariable("batch_size"));
// 变量自增
currentPage = currentPage + 1;
// 更新变量
parent_job.setVariable("current_page", currentPage.toString());
// 必须返回true,否则无法流转至下一个节点
true;
思路是这样的:
- 先调用一次接口拿到总条数,算出总页数
- 然后循环执行转换,每执行一次 page+1
- 直到 page > totalPage 时停止
可以用 JavaScript 脚本 或 计算器 组件来实现 page 自增,用 检测字段值 组件判断是否继续。
获取方式:百度网盘(国内推荐)
-
文件名:
循环调用接口保存数据库.zip - 链接:https://pan.baidu.com/s/1mrmWvkiHox0lavt3vKKiMQ
-
提取码:
fpve
总结
以上就是用 Kettle 调用 HTTP 接口分页同步数据的完整过程。整体思路其实不难,就是把传统的 ETL 思路用在 API 数据源上。
如果大家在实际操作中遇到问题,欢迎评论区留言讨论!
参考链接:
- Kettle 官方文档
- JSONPath 语法教程
© 版权声明
文章版权归作者所有,未经允许请勿转载。