Kettle应用实例
需求
数据库中有很多坐标,需要通过百度地图API取到对应地点的信息,并入库。
步骤描述
- 从数据库读取经纬度
- 调用百度地图API拿到数据
- 解析数据
- 结果入库
具体实现
1. 从数据库读取经纬度
该步骤使用kettle的表输入实现,SQL如下所示:
select lat, lng, concat(lat,',',lng) as location from locations
注:由于百度地图API需要经纬度在一起的写法,所以构造了location字段
2. 调用百度地图API拿到数据
该步骤使用kettle的HTTP Client实现,配置如下:
URL:http://api.map.baidu.com/geocoder/v2/?output=json&pois=0&ak=xxxxxxxx结果字段名:result
注:ak参数为百度地图API生成的应用标识,详细文档见
增加参数如下:
名称:location命名参数:location
注:名称为第一步结果集的字段名,命名参数为URL参数的参数名
3. 解析数据
由于第二步拿到的数据格式为JSON,所以该步骤采用kettle的JSON INPUT实现,其中相关设置如下:
源定义在一个字段里:打钩从字段获取源:result
并添加如下字段信息:
名称 路径 类型formatted_address result.formatted_address Stringbusiness result.business Stringdistrict result.addressComponent.district Stringstreet result.addressComponent.street Stringstreet_number result.addressComponent.street_number Stringdistance result.addressComponent.distance String
4. 结果入库
该步骤使用kettle的表输出完成,配置如下:
目标表:locations_result
数据库字段为:
表字段 流字段lat latlng lngaddress formatted_addressbusiness businessdistrict districtstreet streetstreet_number street_numberdistance distance
效果预览
数据表结构
CREATE TABLE `locations` ( `lat` float DEFAULT NULL, `lng` float DEFAULT NULL, `text` varchar(100) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `locations_result` ( `lat` float NOT NULL, `lng` float DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `business` varchar(100) DEFAULT NULL, `district` varchar(10) DEFAULT NULL, `street` varchar(50) DEFAULT NULL, `street_number` varchar(50) DEFAULT NULL, `distance` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;