snowflake:无法递归解析xml

问题描述 投票:0回答:1

我有这个xml

<product product-id="P001">
  <images>
    <image-group view-type="vt01">
      <image path="IP001">
        <title xml:lang="default"></title>
      </image>
      <image path="IP002">
        <title xml:lang="JP"></title>
      </image>
      <image path="IP003">
        <title xml:lang="KOR"></title>
      </image>
      <image path="IP004">
        <title xml:lang="ENG"></title>
      </image>
      <image path="IP005">
        <title xml:lang="RUS"></title>
      </image>
      <image path="IP006">
        <title xml:lang="FRA"></title>
      </image>
    </image-group>
  </images>
</product>

我需要获取列表中每个图像组的所有单个图像详细信息

image group : vt01
  image path : IP001 
  image lang : default

  image path : IP002 
  image lang : JP

  image path : IP003 
  image lang : KOR

  image path : IP004 
  image lang : ENG

  image path : IP005 
  image lang : RUS

  image path : IP006
  image lang : FRA

我现在仅获得第一级图像组详细信息和第一级图像详细信息。

image group : vt01
  image path : IP001      
  image lang : default

我使用“ copyinto”将XML加载到SNOWFLAKE使用此代码:

WITH SRC AS (SELECT PARSE_XML(CAT_XML) as XML FROM "SAMPLE"."XML_02")
select
t.value:"@view-type" as VIEW_TYPE,
xmlget(t.value,'image'):"@path" as IMAGE_PATH,
xmlget(xmlget(t.value,'image'), 'title'):"@xml:lang" as TITLE_LANG
from SRC s,
table(flatten(input => to_array(xmlget(s.XML,'images'):"$"),recursive=> FALSE)) t

[有人可以帮我这个忙

xml xml-parsing snowflake-cloud-data-platform
1个回答
0
投票
您可以测试以下CTE。假设您的XML位于定义为类型变体的名为“ XML”的列中的名为“ SRC”的表中。从那里,您可以根据需要进行修改以使用复制语句。

with IMAGES("VALUE") as ( select "VALUE" from SRC, lateral flatten(SRC.XML:"$") IMAGES where "KEY" = '$' ), IMAGE_ARRAY(IMAGE) as ( select I."VALUE" from IMAGES, lateral flatten(IMAGES."VALUE") I where "KEY" = '$' ), IMAGE(IMAGE_XML) as ( select "VALUE" from IMAGE_ARRAY, lateral flatten(input => to_array(IMAGE)) IMG ) select get(IMAGE_XML, '@path')::string as PATH, get(get(IMAGE_XML, '$'), '@xml:lang')::string as LANG from IMAGE ;

© www.soinside.com 2019 - 2024. All rights reserved.