如何通过Hive XPATH解析XML嵌套字段并匹配正确父节点避免交叉连接
Hive XPATH解析多层嵌套XML避免交叉连接方案
实现思路
- 不要分别提取不同字段的数组再炸开,该操作会因为字段缺失、数组长度不一致产生笛卡尔积(交叉连接)
- 优先提取所有
<ChildRoot>节点的完整XML片段,每个片段对应一条业务数据,拆分到独立行 - 对每行的单个
<ChildRoot>片段单独解析所需字段,缺失字段自动返回空值,完全匹配预期输出
实现代码
假设存储XML内容的表为xml_table,XML内容字段为xml_str(String类型),参考SQL如下:
WITH child_root_list AS ( -- 提取所有ChildRoot节点的XML片段,炸开为单行单节点 SELECT child_root_xml FROM xml_table LATERAL VIEW EXPLODE(xpath(xml_str, '//Parents/Parent/ChildRoots/ChildRoot')) t AS child_root_xml ) -- 对每个单独的ChildRoot节点解析对应字段 SELECT xpath_string(child_root_xml, 'ChildRoot/FieldA') AS FieldA, xpath_string(child_root_xml, 'ChildRoot/FieldB') AS FieldB, xpath_string(child_root_xml, 'ChildRoot/FieldC') AS FieldC, xpath_string(child_root_xml, 'ChildRoot/FieldD') AS FieldD FROM child_root_list;
说明
- 用到的Hive XPATH函数说明:
xpath(xml_str, 节点路径):返回匹配路径的所有节点的XML片段数组xpath_string(xml片段, 字段路径):返回对应字段的文本值,节点不存在时返回空字符串
- 该方案不需要额外的关联字段,也不会产生交叉连接,时间复杂度和
<ChildRoot>节点总数线性相关
内容的提问来源于stack exchange,提问作者RKR
相关产品推荐
相关产品推荐

