Kettle使用_19 HTTP Client与XML JavaSript解析
需求:通过Kettle实现http://mirrors.163.com/centos/7/os/x86_64/repodata/repomd.xml的Web调用并将数字类型的timestamp解析为时间类型。
解决方法:通过Kettle的生成记录、HTTP Client、XML文件输入、选择改名值、JAVA Script组件来解决。其中HTTP Client负责接口的调用,XML文件输入负责解析XML,JAVA Script组件负责解析整型timestamp。
Step1:新建个转换
Step2: 拖个生成记录组件,(该组件位于转换的输入分类下),配置如下:
Step3:拖个Http client,该组件位于转换的查询分类下。通过SHIFT与记录生成组件连接。
Step3:配置HTTP Client组件,配置URL字段名为repomd(对应生成记录里的字段),字段结果名为job-xml。
Step4:拖个xml数据输入组件,该组件位于转换的输入分类下,并通过SHIFT与HTTP Client组件连接。
Step5:配置xml数据输入组件见下:
配置XML解析源字段,这里是job-xml,需先勾选选项 XML源定义在一个字段里。
配置循环读取路径,这里是/repomd/data
配置字段解析,这里可通过获取字段让kettle自动解析。
注:这里的data_type字段需要自己手动输入解析路径, @type,加下:
Step6:拖动个选择改名值(字段选择)组件,位于转换的转换分类下。通过SHIFT与XML输入数据连接。并配置该组件。
Step7:拖动个Java Script组件,位于转换的脚本分类下。通过SHIFT与字段选择组件连接。并配置该组件。
Java Script脚本:
//Script here
//var commonTime = new Date(repomdtime*1000).Format("yyyy-MM-dd hh:mm:ss");
function add0(m){return m<10?'0'+m:m }
var time = new Date(repomdtime*1000);
var y = time.getFullYear();
var m = time.getMonth()+1;
var d = time.getDate();
var h = time.getHours();
var mm = time.getMinutes();
var s = time.getSeconds();
var commonTime = y+'-'+add0(m)+'-'+add0(d)+' '+add0(h)+':'+add0(mm)+':'+add0(s);
Step8:保存并运行并验证该转换。
完整流程示意: