所以我有一个 XML 文档,它已从阶段加载到 Snowflake 中的变体列中,如下所示。
<LIST_OUTPUT>
<RESPONSE>
<EMP_LIST>
<EMP>
<ID>1</ID>
<TYPE>PERMANENT</TYPE>
<DOC_LIST>
<DOC>
<ID>DOC-001</ID>
<TYPE>PASSPORT</TYPE>
</DOC>
<DOC>
<ID>DOC-002</ID>
<TYPE>DRIVING LICENSE</TYPE>
</DOC>
</DOC_LIST>
</EMP>
<EMP>
<ID>2</ID>
<TYPE>CONTRACTOR</TYPE>
<DOC_LIST>
<DOC>
<ID>DOC-001</ID>
<TYPE>PASSPORT</TYPE>
</DOC>
<DOC>
<ID>DOC-002</ID>
<TYPE>DRIVING LICENSE</TYPE>
</DOC>
</DOC_LIST>
</EMP>
</EMP_LIST>
</RESPONSE>
</LIST_OUTPUT>
我正在尝试将其放入员工表中,所以它看起来像
emp_id | emp_类型 | emp_docs |
---|---|---|
1 | 永久 | [护照、驾驶执照] |
2 | 承包商 | [护照、驾驶执照] |
到目前为止我已经
select xmlget(emp.value,'ID'):"$" AS EMP_ID
,XMLGET(emp.value,'TYPE'):"$" AS EMP_TYPE
from raw_xml
, lateral flatten(xmlget(xmlget(xml,'RESPONSE'),'EMP_LIST'):"$") emp
但不确定如何将文档类型拉入一列。有什么指示吗?
select distinct XMLGET(EMP_LIST.VALUE,'ID'):"$" :: INTEGER as EMP_ID
,xmlget(EMP_LIST.value,'TYPE'):"$" :: string as EMP_TYPE
,array_agg( xmlget(doc.value,'TYPE'):"$"::STRING) within group(order by xmlget(doc.value,'ID'):"$" :: STRING ) over (partition by XMLGET(EMP_LIST.VALUE,'ID') ) as emp_docs_array
,listagg( xmlget(doc.value,'TYPE'):"$"::STRING,',') within group (order by xmlget(doc.value,'ID'):"$" :: STRING) over (partition by XMLGET(EMP_LIST.VALUE,'ID') ) as emp_docs_list
from raw_xml
, LATERAL FLATTEN(XMLGET(xmlget(xml,'RESPONSE'),'EMP_LIST'):"$") AS EMP_LIST
,LATERAL FLATTEN(XMLGET(EMP_LIST.VALUE,'DOC_LIST'):"$") as doc
输出: