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生成的应用标识,详细文档见http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
增加参数如下:
名称:location
命名参数:location
注:名称为第一步结果集的字段名,命名参数为URL参数的参数名
3. 解析数据
由于第二步拿到的数据格式为JSON,所以该步骤采用kettle的JSON INPUT实现,其中相关设置如下:
源定义在一个字段里:打钩
从字段获取源:result
并添加如下字段信息:
名称 路径 类型
formatted_address result.formatted_address String
business result.business String
district result.addressComponent.district String
street result.addressComponent.street String
street_number result.addressComponent.street_number String
distance result.addressComponent.distance String
4. 结果入库
该步骤使用kettle的表输出完成,配置如下:
目标表:locations_result
数据库字段为:
表字段 流字段
lat lat
lng lng
address formatted_address
business business
district district
street street
street_number street_number
distance 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;