我有下面的xml
<qr>
<Trade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ss="http://www.mycomp.com/mycall/schema/1/durables/ss" xmlns:ss-raw="http://www.mycomp.com/api.dsl/tm/2/ss-raw/v1.0">
<TradeId>
<ss:SYSTEMID>1466413528</ss:SYSTEMID>
</TradeId>
<InstrumentId xsi:nil="true">test_instrument</InstrumentId>
<TraderSourceSystemName xsi:nil="true">akjsdfklas</TraderSourceSystemName>
</Trade>
</qr>
我正在尝试使用
CREATE EXTERNAL TABLE sample(TradeId STRING,
InstrumentId STRING,
TraderSourceSystemName STRING
)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.TradeId"="Trade/TradeId",
"column.xpath.InstrumentId"="Trade/InstrumentId/text()",
"column.xpath.TraderSourceSystemName"="Trade/TraderSourceSystemName/text()"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION "hdfs://server:port/user/sl/sample/"
TBLPROPERTIES (
"xmlinput.start"="<Trade xmlns",
"xmlinput.end"="</Trade>"
);
当我从表中选择*时,第一个字段如下所示
<pre>
<TradeId><ss:SYSTEMID xmlns:ss="...namespace...">1466413528</ss:SYSTEMID></TradeId>
如何使用行业id- 1466413528
3条答案
按热度按时间xxb16uws1#
如何在此xml的op上创建配置单元表。
4urapxun2#
使用xpath
//Trade/TradeId/ss:SYSTEMID/text()
为了column.xpath.TradeId
z0qdvdin3#
局限性
...
目前只支持XPath1.0规范。元素和属性的限定名的本地部分在处理配置单元字段名时使用。命名空间前缀将被忽略。
https://github.com/dvasilen/hive-xml-serde/wiki/xml-data-sources