我正在使用 Pentaho (Spoon / Kettle) 进行 ETL 过程,我想在其中读取 XML 文件并将元素值存储到 db。
这适用于“从 XML 获取数据”-组件...但是 XML 文件很大,有几个千兆字节,因此读取文件需要很长时间。
Pentaho 维基 说:
现有的从 XML 获取数据步骤更易于使用,但使用需要在内存处理中的 DOM 解析器,当这些部分非常大时,甚至清除文件的某些部分是不够的。
XML 输入流 (StAX) 步骤使用完全不同的方法来解决具有非常大和复杂的数据结构以及需要非常快速的数据加载的用例......
因此,我现在正尝试对 StAX 做同样的事情,但它似乎并没有按计划进行。我正在使用只有一个元素组的 XML 文件对此进行测试。读取该文件,然后将其映射/插入到表中......但现在我得到多行到表中,其中所有值都是“未定义”的,有些行我有正确的值。表中总共有 92 行,即使它应该只有一行。
流程如下:
1) 用 StAX 读取
2) 修改后的 Java Script 值
3) 输出到数据库
在第 2 步)我正在执行以下操作:
变量编号;
if ( xml_data_type_description.equals("CHARACTERS") && xml_path.equals("/labels/label/id") ) { id = xml_data_value; } ...
我以http://forums.pentaho.com/showthread.php?83480-XPath-in-Get-data-from-XML-tool&p=261230#post261230中的 positional-staz.zip 为例。
如何使用 StAX 读取 XML 文件并将元素值存储到 DB?
我一直在尝试寻找示例,但没有找到太多。上面的示例在插入行之前使用了“Filter Rows”组件。我不太明白为什么要使用它,我不能只映射我需要的值吗?可能是因为我不使用或不知道如何使用 Filter Rows 组件而出现此问题。
干杯!