XPath表达式在Hive中不起作用

时间:2015-02-16 15:23:50

标签: xml xpath hive

我希望将以下XML插入到Hive表中,它会在自己的文件中上传到HDFS。

<FIXML r="20030618" s="20040109" v="4.4" xr="FIA" xv="1" xmlns="http://www.fixprotocol.org/FIXML-4-4">
<Batch>
<Information RptID="23520135" BizDt="2015-01-20"></Information>
<Information RptID="23520378" BizDt="2015-01-20"></Information>
</Batch>
</FIXML>

这是我的Hive创建表

Create TABLE mydata(xmldata string) 
LOCATION 'hdfs://nameservice1/user/john/mydata/';
Drop table mydataview;
CREATE table mydataview(RptID String, BizDt String);
insert overwrite table mydataview select xpath(xmldata ,'//@RptID'),xpath(xmldata ,'//@BizDt') from mydata;

使用上面的上述XML示例,最后一行(insert overwrite)将失败。我相信这是因为当我创建表mydata时,XML的每一行都作为唯一行插入到表中。因此,当XPath尝试查询行<FIXML>时 - 它会爆炸。当我删除<Information><Batch>元素时 - 表格按预期工作。

有没有什么方法可以将整段XML插入到我的表中?或者我可以做另一种选择吗?我宁愿不必解析文件中的麻烦元素,但作为最后的手段,我将不得不这样做。

1 个答案:

答案 0 :(得分:0)

我有想法在我的create table上设置由\ 003(EOF字符)终止的行,这样整个文件就会被读入单行。不幸的是,Hive不支持这一点 - LINES TERMINATED BY only supports newline '\n' right now

现在看来最好的选择是预处理文件。