【问题标题】:Extract data from XML string in Hive Table without using XPath在不使用 XPath 的情况下从 Hive 表中的 XML 字符串中提取数据
【发布时间】:2020-05-19 11:37:32
【问题描述】:

我正在尝试使用视图从位于配置单元表的单个列中的大型 XML 字符串中提取字符串(值)。我需要为 COMPANY_ID、SALE_IND 和 CLOSING_IND 获取关联的 FOO_STRING_VALUE。

    <Message>
        <Header>
            <FOO_STRING>
                <FOO_STRING_NAME>COMPANY_ID</FOO_STRING_NAME>
                <FOO_STRING_VALUE>44-1235</FOO_STRING_VALUE>
            </FOO_STRING>
            <FOO_STRING>
                <FOO_STRING_NAME>SALE_IND</FOO_STRING_NAME>
                <FOO_STRING_VALUE>Y</FOO_STRING_VALUE>
            </FOO_STRING>
            <FOO_STRING>
                <FOO_STRING_NAME>CLOSING_IND</FOO_STRING_NAME>
                <FOO_STRING_VALUE>Y</FOO_STRING_VALUE>
            </FOO_STRING>
        </Header>
    </Message>

XML 文件最多可以有 50 个“FOO_STRINGS”,并且无法保证它们的顺序,所以我不能使用 XPATH,除非我对每个名称/值对有 50 个 xpath_string 调用并稍后匹配它们。我正在使用这样的 xpath .....

       xpath_string(xml_txt, '/Message/Header/FOO_STRING[1]/FOO_STRING_VALUE') AS String_Val_1                   
       xpath_string(xml_txt, '/Message/Header/FOO_STRING[2]/FOO_STRING_VALUE') AS String_Val_2                                                        
       xpath_string(xml_txt, '/Message/Header/FOO_STRING[3]/FOO_STRING_VALUE') AS String_Val_3                     

但是,如果订单发生变化,它就不起作用。我想知道是否有一种快速的方法可以找到所需的FOO_STRING_NAME 并使用regexp_extract() 或其他方式获取相应的值?我不熟悉正则表达式,所以任何帮助或建议都会有所帮助,非常感谢

【问题讨论】:

    标签: sql regex xpath hive xml-parsing


    【解决方案1】:

    " 如果订单发生变化而不是它不起作用 "

    那么,不要使用位置。

    xpath_string(xml_txt, '/Message/Header/FOO_STRING[FOO_STRING_NAME="COMPANY_ID"]/FOO_STRING_VALUE') AS String_Val_1                   
    xpath_string(xml_txt, '/Message/Header/FOO_STRING[FOO_STRING_NAME="SALE_IND"]/FOO_STRING_VALUE') AS String_Val_2                                                        
    xpath_string(xml_txt, '/Message/Header/FOO_STRING[FOO_STRING_NAME="CLOSING_IND"]/FOO_STRING_VALUE') AS String_Val_3 
    

    【讨论】:

    • 谢谢 Alejandro,我不知道 xpath 可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2018-06-06
    相关资源
    最近更新 更多