使用kettle把XML文档转换成数据表结构
@H_301_2@@H_301_2@
在kettle中Get data from xml步骤和 XML Input Stream (StAX)步骤读取并解析xml文件。Get data from xml步骤使用dom方式解析,比较消耗内存,当文件很大时,就不可取。XML Input Stream (StAX)步骤使用完全不同的方式解析大而复杂的文件,且能快速载入数据,所以建议使用该步骤。
@H_301_2@ @H_301_2@<?xml version="1.0"?>
@H_301_2@<timeseries>
@H_301_2@<measurementyear="2000">
@H_301_2@<!-- value ofitem named A in 2000 is 8.5 -->
@H_301_2@<itemname="A">8.5</item>
@H_301_2@<itemname="B">9.8</item>
@H_301_2@</measurement>
@H_301_2@<measurementyear="2001">
@H_301_2@<itemname="A">12.2</item>
@H_301_2@<itemname="B">9.4</item>
@H_301_2@</measurement>
@H_301_2@<measurementyear="2002">
@H_301_2@<itemname="A">11.1</item>
@H_301_2@<itemname="B">7.2</item>
@H_301_2@</measurement>
@H_301_2@</timeseries>
@H_301_2@@H_301_2@
解析成数据表的格式数据如下:
@H_301_2@@H_301_2@
@H_301_2@@H_301_2@
使用下面步骤去实现该功能
@H_301_2@-
xmlinput stream(stax):流方式载入xml文档
-
过滤行:去除掉不相关的文档元素
- switch/case步骤:分离第一级(measurement)和第二级(item)
- Rowdenormaliser:把第二级的多行转成一行(行专列)
- MergeJoin:合并子元素到第一级行(增加列)
示例可以从这里下载
@H_301_2@@H_301_2@
@H_301_2@@H_301_2@
步骤
@H_301_2@最容易理解执行情况的方式,通过预览没步骤的执行结果(5.x版本可以直接查看数据流),下图显示该步骤的执行原理。
@H_301_2@@H_301_2@
@H_301_2@步骤
@H_301_2@把两个来自不同数据源的流进行合并,其实和sql中join原理是一样的,只不过在kettle中是针对流数据,不是表数据。非常重要的是:流数据要根据键(join中使用的)排序,本列中第一步载入xml文件时,已经排序,所以不再选哟“sort rows”步骤。
@H_301_2@@H_301_2@
原文链接:https://www.f2er.com/xml/298081.html