You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hive Query解析raw_xml属性中的嵌套XML(仅处理active为True的节点)

Hive Query解析带嵌套XML的ClassApplications数据(仅处理active="True"的Report)

嘿,我来帮你搞定这个Hive解析嵌套XML的需求!咱们的核心要求很明确:只处理<Report>节点中active属性为True的记录,然后解析它raw_xml字段里的嵌套XML内容对吧?

Hive本身提供了一系列xpath相关的UDF来处理XML数据,刚好能满足这个场景。下面直接上可用的查询示例,再一步步拆解说明:

SELECT
    -- 提取外层ClassApplications的基础属性(按需选择)
    xpath_string(class_app_xml, '/ClassApplications/@id') as app_id,
    xpath_string(class_app_xml, '/ClassApplications/@bundle_id') as bundle_id,
    -- 提取符合条件的Report的raw_xml内容
    report_raw_xml,
    -- 解析raw_xml里的嵌套属性,这里以Response的Score属性为例
    xpath_string(report_raw_xml, '/Response/@Score') as response_score,
    -- 解析嵌套节点属性,比如Student的Name属性
    xpath_string(report_raw_xml, '/Response/Student/@Name') as student_name
FROM (
    -- 先拆分外层XML为单个Report节点,同时过滤有效记录
    SELECT
        class_app_xml,
        xpath_string(report_node, './@raw_xml') as report_raw_xml
    FROM your_table_name
    -- 用xpath_array拆分所有Report节点为多行
    LATERAL VIEW xpath_array(class_app_xml, '/ClassApplications/Reports/Report') report_nodes as report_node
    -- 只保留active属性为True的Report
    WHERE xpath_string(report_node, './@active') = 'True'
) filtered_reports;

关键部分解释:

  • 拆分外层XML:用xpath_array配合LATERAL VIEW,把<ClassApplications/Reports>下的所有<Report>节点拆分成单独的行,方便逐个处理每个Report记录。
  • 过滤有效记录:通过xpath_string(report_node, './@active')提取当前Report的active属性值,再用WHERE子句筛选出值为True的记录。
  • 解析嵌套XML:先提取raw_xml的字符串值,再用xpath_string直接解析这个嵌套XML——语法和处理外层XML完全一致,只要写对目标节点/属性的路径就行。

小提示:

  • 如果raw_xml里有转义字符(比如示例中的&lt;、&quot;),Hive的xpath函数会自动处理,不用手动替换。
  • 要是需要提取数值型属性,可以用xpath_int、xpath_float这类类型特定的UDF,比xpath_string更精准。

内容的提问来源于stack exchange,提问作者HadoopAddict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:47:57