如何在Hive中处理XML文件并提取USERNAME与PASSWORD字段
在Hive中提取XML文件的USERNAME和PASSWORD字段
要处理你提供的XML文件并仅提取USERNAME和PASSWORD字段,我们可以利用Hive的XML SerDe(序列化/反序列化工具)来实现XML数据的解析与字段映射。
首先看你的XML示例:
<?XML version='1.0' ?> <DATA> <USER USERNAME="ABC" FIRSTNAME="RAJ" LASTNAME="KUMAR" PASSWORD="123" /> <USER USERNAME="DEF" FIRSTNAME="VENKAT" LASTNAME="BALAJI" PASSWORD="123" /> </DATA>
实现步骤与代码
我们需要创建一个Hive表,通过配置XML SerDe来指定如何解析XML中的目标字段:
CREATE TABLE user_xml( USERNAME string, PASSWORD string ) ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' WITH SERDEPROPERTIES ( "column.xpath.USERNAME"="/DATA/USER/@USERNAME", "column.xpath.PASSWORD"="/DATA/USER/@PASSWORD" ) STORED AS INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' TBLPROPERTIES ( "xmlinput.start"="<DATA", "xmlinput.end"="</DATA>" );
关键配置说明
- XML SerDe选择:
com.ibm.spss.hive.serde2.xml.XmlSerDe是Hive中专门用于处理XML数据的工具,它支持通过XPath定位XML中的元素或属性。 - XPath修正:注意这里的XPath使用
@前缀来选取USER标签的属性(原代码中的text()是错误的,因为USERNAME和PASSWORD是标签属性而非文本节点),这样才能正确提取到属性值。 - 输入范围控制:
TBLPROPERTIES中的xmlinput.start和xmlinput.end指定了Hive需要解析的XML根节点范围,确保只处理<DATA>和</DATA>之间的内容,忽略XML声明等无关部分。
建表完成后,执行以下查询即可获取目标字段:
SELECT USERNAME, PASSWORD FROM user_xml;
内容的提问来源于stack exchange,提问作者Kishore
相关产品推荐
相关产品推荐

