gpt4 book ai didi

xpath - hive -横向 View explode xpath

转载 作者:行者123 更新时间:2023-12-03 16:54:30 28 4
gpt4 key购买 nike

我有以下输入XML:

 <?xml version="1.0"?>
<Employees>
<Employee emplid="1111">
<lastname>Watson</lastname>
<age>30</age>
<email>johnwatson@sh.com</email>
</Employee>
<Employee emplid="2222">
<firstname>Sherlock</firstname>
<lastname>Holmes</lastname>
<age>32</age>
<email>sherlock@sh.com</email>
</Employee>
</Employees>


请注意员工1111中缺少的名字

我正在执行以下选择:

 select 
c1.emplid,
fname,
lname
from(
select emplid, xmldata from employeeXML
LATERAL VIEW explode (xpath(xmldata,'/Employees/Employee/@emplid')) dummyTable as emplid )c1

LATERAL VIEW explode (xpath(xmldata,concat('/Employees/Employee[@id="',c1.emplid,'"',']/firstname/text()')))dummyTable2 as fname
LATERAL VIEW explode (xpath(xmldata,concat('/Employees/Employee[@id="',c1.emplid,'"',']/lastname/text()'))) dummyTable3
as lname;


预期结果:

 1111 NULL     Watson
2222 Sherlock Holmes


请注意,缺少的名字为NULL值)

但是我得到以下结果:

2222福尔摩斯

由于缺少员工1111的名字,因此我没有在查询中找回第一位员工。
有没有一种方法可以按预期结果中的要求将两个员工数据取回,并且将第一个名字设置为NULL和/或空格(如果丢失)?
请帮忙。
谢谢,

最佳答案

您始终可以将结果与空字符串连接起来,这可能没问题:

concat(/Employees/Employee[@id="..."]/firstname/text(), '')


这不是您在hive中使用的串联,而是一个内部XPath函数,因此您可能会在一行中同时应用XPath和Hive连接。

顺便说一句,我想您想使用 @emplid而不是 @id来匹配您的数据?

关于xpath - hive -横向 View explode xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483596/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com