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;