shell - 在将数据插入 Hive 表之前加载 xml 文件并映射给定的列
问题描述
我想将 XML 文件加载到配置单元列中,但在此之前我需要使用给定的映射值对某些字段进行一些映射。
例子:
我有一个这样的xml文件:
<?xml version="1.0"?>
<Company>
<Employee>
<FirstName>Test1</FirstName>
<LastName>toto1</LastName>
<ContactNo>111</ContactNo>
<Email>toto1@xyz.com</Email>
<Address>
<City>Bangalore</City>
<State>Karnataka</State>
<Zip>560212</Zip>
</Address>
</Employee>
<Employee>
<FirstName>Test2</FirstName>
<LastName>toto2</LastName>
<ContactNo>222</ContactNo>
<Email>toto2@xyz.com</Email>
<Address>
<City>Bangalore</City>
<State>Karnataka</State>
<Zip>545454</Zip>
</Address>
</Employee>
<Employee>
<FirstName>Test3</FirstName>
<LastName>toto3</LastName>
<ContactNo>333</ContactNo>
<Email>toto3@xyz.com</Email>
<Address>
<City>Bangalore</City>
<State>Karnataka</State>
<Zip>36363</Zip>
</Address>
</Employee>
</Company>
我这样做是为了在 Hive 中加载文件,它对我有用。
添加 jar ${projet}/datagaps_xml_traite/hivexmlserde-1.0.5.3.jar;
删除表如果存在员工;
CREATE external TABLE Employee(
(FirstName STRING,LastName STRING,ContactNo STRING,Email STRING,City STRING,State STRING,Zip STRING)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.FirstName"="/Employee/FirstName/text()",
"column.xpath.LastName"="//Employee/LastName/text()",
"column.xpath.ContactNo"="/Employee/ContactNo/text()",
"column.xpath.City"="/Employee/Address/City/text()",
"column.xpath.State"="/Employee/Address/State/text()",
"column.xpath.Zip"="/Employee/Address/Zip/text()",
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION '/data/myFile.xml/'
TBLPROPERTIES (
"xmlinput.start"="<Employee",
"xmlinput.end"="</Employee>" )
;
现在,我有一个这样的地图:
contactNo,identif
111, XXX
222, YYY
333, ZZZ
我想用它的 identif 映射每个 contactNo 并在 Hive 中插入 identif 值。
有人可以指导我解决这个问题。
解决方案
推荐阅读
- python-3.x - 如何将向量与python中DataFrame中的某些特定列相乘?
- excel - 即使任务完成没有错误,代码也会进入错误处理程序
- postgresql - 如何处理返回触发器的过程的 jOOQ 折旧警告?
- python - 我的程序在 1 次迭代后停止,同时比较两个列表
- jenkins - “阶段”部分之外的 Jenkinsile 全局变量
- c - 为什么 fscanf 在将数据读入文本文件时会出现分段错误?
- rabbitmq - 如何以json格式获取rabbitmq集群状态
- r - 通过 R 中数据框的列迭代(循环)
- pyspark - 将 SQL Case 语句转换为 Spark
- active-directory - Centrex/Asterisk 具有多个不同的 AD