Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在配置单元中,是否有一种方法可以解析同一XML系列中同一标记的多次出现?_Sql_Xml_Xpath_Hive_Hiveql - Fatal编程技术网

Sql 在配置单元中,是否有一种方法可以解析同一XML系列中同一标记的多次出现?

Sql 在配置单元中,是否有一种方法可以解析同一XML系列中同一标记的多次出现?,sql,xml,xpath,hive,hiveql,Sql,Xml,Xpath,Hive,Hiveql,在我的场景中,每个父族下都会出现一个名称标记。父族重复,每个族中都有多个值标记。我的期望是解析每个[Name,Value]对,并按行显示它们 示例XML和预期输出如下所示: <ParentArray> <ParentFieldArray> <Name>ABCD</Name> <Value> <string>111</string>

在我的场景中,每个父族下都会出现一个名称标记。父族重复,每个族中都有多个值标记。我的期望是解析每个[Name,Value]对,并按行显示它们

示例XML和预期输出如下所示:

<ParentArray>
    <ParentFieldArray>
        <Name>ABCD</Name>
        <Value>
            <string>111</string>
            <string>222</string>
            <string>333</string>
        </Value>
    </ParentFieldArray>
    <ParentFieldArray>
        <Name>EFGH</Name>
        <Value>
            <string>444</string>
            <string>555</string>
        </Value>
    </ParentFieldArray>
</ParentArray>
此处重复ParentFieldArray族,其中的值标记数量也因族而异

已尝试查询:

select Name, Value from <table_name> -- "xmlinfo" field in this table includes the above XML content
LATERAL VIEW POSEXPLODE(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Name/text()')) NM as Name_pos, Name
LATERAL VIEW POSEXPLODE(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Value/string/text()')) VL as Value_pos, Value;
我试图用横向视图进行查询。。概念,但它似乎不起作用。基本上,我无法根据每个值的位置映射正确的名称。这会导致交叉连接


SQL中是否有任何其他函数/概念可以如上所示获取输出?

获取名称并将其传递给第二个XPATH,以仅筛选包含该名称的ParentFieldArray

演示:


非常感谢你在这里的帮助。。基本上是检索名称标记&将它们分别映射到各自的值标记。干杯通过上述方法,我可以解决存在非空值标记的场景。也有存在空/空值标记的场景。有没有一种方法也可以阅读它们?假设在上面的XML中,如果ParentFieldArray中的Value标记下有一个or事件,是否有一种方法可以将它们作为单独的行读取,其中名称将填充为空白值?@RKR类似这样的内容:“ParentArray/ParentFieldArray/Value/string/[非文本]”,但我不完全理解。最好提出新问题并详细描述预期输出。[nottext]应该有助于发现suchI发布了一个新的问题和细节。请查看以下链接:
select Name, Value from <table_name> -- "xmlinfo" field in this table includes the above XML content
LATERAL VIEW POSEXPLODE(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Name/text()')) NM as Name_pos, Name
LATERAL VIEW POSEXPLODE(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Value/string/text()')) VL as Value_pos, Value;
with your_data as (
select  '<ParentArray>
    <ParentFieldArray>
        <Name>ABCD</Name>
        <Value>
            <string>111</string>
            <string>222</string>
            <string>333</string>
        </Value>
    </ParentFieldArray>
    <ParentFieldArray>
        <Name>EFGH</Name>
        <Value>
            <string>444</string>
            <string>555</string>
        </Value>
    </ParentFieldArray>
</ParentArray>' as xmlinfo
)

select name, value 
  from your_data d
       lateral view outer explode(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Name/text()')) pf as  Name
       lateral view outer explode(XPATH(xmlinfo, concat('ParentArray/ParentFieldArray[Name="', pf.Name, '"]/Value/string/text()'))) vl as value
name    value
ABCD    111
ABCD    222
ABCD    333
EFGH    444
EFGH    555