[英]snowflake : cannot recursively parse xml
我有這個 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 就像解開一個難解的結。 您可以嵌套 get、xmlget、lateral 和 flatten 子句,但這變得不可讀且難以維護。 我推薦的方法是使用 CTE 逐步進行。
您可以測試以下 CTE。 它假定您的 XML 位於名為“SRC”的表中,該表位於定義為類型變體的名為“XML”的列中。 從那里您可以根據需要進行修改以使用您的副本聲明。
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
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.