我希望将以下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插入到我的表中?或者我可以做另一种选择吗?我宁愿不必解析文件中的麻烦元素,但作为最后的手段,我将不得不这样做。
答案 0 :(得分:0)
我有想法在我的create table上设置由\ 003(EOF字符)终止的行,这样整个文件就会被读入单行。不幸的是,Hive不支持这一点 - LINES TERMINATED BY only supports newline '\n' right now
现在看来最好的选择是预处理文件。