hadoop—使用pig从配置单元表解析嵌套的xml字符串

rqcrx0a6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(194)

我正在尝试使用pig从配置单元表中的字段中提取一些xml,而不是从xml文件(这是我所读的大多数示例的假设)。xml来自一个如下所示的表:

ID, {XML_string}

xml字符串包含n。行数,始终包含最多10个属性中的至少一个。我们可以假设属性#1将始终存在并且是唯一的。

<row>
 <att1></att1>
 <att2></att2>
 ...
</row>
<row>
 <att1></att1>
 <att2></att2>
 ...
</row>
...

我想将其转换为一个新表,将xml字符串中的每一行分解为新表中的一个单独行,但仍然希望包含现有表中的id。

ID, att1, att2, att3
==  ====  ====  ====
1   1     xxx   xxx
1   2     xxx   xxx
1   3     xxx   xxx
2   1     xxx   xxx

到目前为止,我已经在pig中使用xpathall实现了这一点。我读过很多建议,建议避免使用regex进行xml解析。

REGISTER /home/piggybank-0.12.0.jar
DEFINE XPathAll org.apache.pig.piggybank.evaluation.xml.XPathAll();
A = LOAD 'HiveTable' USING org.apache.hive.hcatalog.pig.HCatLoader();
B= FOREACH A GENERATE id, 
    XPathAll(xml_string,'ROW/_ATT1') as att1;
    XPathAll(xml_string,'ROW/_ATT2') as att2;
    XPathAll(xml_string,'ROW/_ATT3') as att3;
dump B;

假设项1有三个行示例,这将产生以下输出:

(1 (Att1-i1,Att1-i2,Att1-i3),(Att2-i1,Att2-i2,Att2-i3),(Att3-i1,Att3-i2,Att3-i3))

所有的信息似乎都在那里,我只是无法解锁将每个嵌入元组中的第一个元素拉到新行中的方法,然后是第二个元素,依此类推。换句话说:

(1, Att1-i1, Att2-i1, Att3-i1)
(1, Att1-i2, Att2-i2, Att3-i2)
(1, Att1-i3, Att2-i3, Att3-i3)

我坚持希望这可以通过使用hive+pig来完成,而不必求助于java等等。我很感激你的任何见解。我对目前所采取的方法不感兴趣,所以如果我已经走了很长的路,请告诉我!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题