在 Hive 中,如何从 XML 中的标记定义中获取值?
In Hive, how to get the values from within tag definitions in an XML?
在 Hive 查询中解析 XML 时如何考虑标记定义?下面是我要解析的XML:
<Parents>
<Parent>
<emp id="A12345">
<acc name="perm_ID">44444</acc>
<acc name="temp_ID">55555</acc>
</emp>
</Parent>
</Parents>
有3个字段EmpID、PermID和TempID。预期输出为:
EmpID PermID TempID
A12345 44444 55555
XPATH()
returns 节点列表,XPATH_STRING()
returns 标量字符串。如果 XML 数组中有很多 emp,请使用 XPATH()
获取 Id 属性列表 + lateral view explode
分解行,然后使用 Id
参数化 XPATH_STRING从相应的 emp.
获取元素
查看此演示 (Hive):
with mytable as (
select '<Parents>
<Parent>
<emp id="A12345">
<acc name="perm_ID">44444</acc>
<acc name="temp_ID">55555</acc>
</emp>
</Parent>
</Parents>' as xml
)
select e.Id as EmpId,
XPATH_STRING(t.xml,concat('/Parents/Parent/emp[@id="',e.Id,'"]/acc[@name="perm_ID"]/text()')) permID,
XPATH_STRING(t.xml,concat('/Parents/Parent/emp[@id="',e.Id,'"]/acc[@name="temp_ID"]/text()')) tempID
from mytable t
lateral view outer explode(XPATH(t.xml, '/Parents/Parent/emp/@id')) e as Id
结果:
empid permid tempid
A12345 44444 55555
在此演示中,您可以了解如何处理数组和标量元素和属性,以及如何使用其他 xpath 提取的值来参数化您的 xpath。
另请参阅其他 Hive XPATH 函数:XPathUDF
在 Hive 查询中解析 XML 时如何考虑标记定义?下面是我要解析的XML:
<Parents>
<Parent>
<emp id="A12345">
<acc name="perm_ID">44444</acc>
<acc name="temp_ID">55555</acc>
</emp>
</Parent>
</Parents>
有3个字段EmpID、PermID和TempID。预期输出为:
EmpID PermID TempID
A12345 44444 55555
XPATH()
returns 节点列表,XPATH_STRING()
returns 标量字符串。如果 XML 数组中有很多 emp,请使用 XPATH()
获取 Id 属性列表 + lateral view explode
分解行,然后使用 Id
参数化 XPATH_STRING从相应的 emp.
查看此演示 (Hive):
with mytable as (
select '<Parents>
<Parent>
<emp id="A12345">
<acc name="perm_ID">44444</acc>
<acc name="temp_ID">55555</acc>
</emp>
</Parent>
</Parents>' as xml
)
select e.Id as EmpId,
XPATH_STRING(t.xml,concat('/Parents/Parent/emp[@id="',e.Id,'"]/acc[@name="perm_ID"]/text()')) permID,
XPATH_STRING(t.xml,concat('/Parents/Parent/emp[@id="',e.Id,'"]/acc[@name="temp_ID"]/text()')) tempID
from mytable t
lateral view outer explode(XPATH(t.xml, '/Parents/Parent/emp/@id')) e as Id
结果:
empid permid tempid
A12345 44444 55555
在此演示中,您可以了解如何处理数组和标量元素和属性,以及如何使用其他 xpath 提取的值来参数化您的 xpath。
另请参阅其他 Hive XPATH 函数:XPathUDF