如何解决通过 Snowflake UI 查询具有嵌套标签的 XML
我正在尝试使用 Snowflake 中的横向展平功能查询包含嵌套标记的 XML。我无法遍历并获得所需格式的结果。
表 EMP_XML 有一个变量列 SRC_XML,其中包含以下 XML 值 -
<DATALOAD>
<HEADER>
<RECDATE>
<START>2021-03-02</START>
<END>2021-03-02</END>
</RECDATE>
<EMP_DETAILS>
<EMPLOYEE>
<EMP_ID>123</EMP_ID>
<EMP_NAME>ABC</EMP_NAME>
<EMP_ADDR>DETROIT</EMP_ADDR>
</EMPLOYEE>
<EMPLOYEE>
<EMP_ID>456</EMP_ID>
<EMP_NAME>XYZ</EMP_NAME>
<EMP_ADDR>RICHMOND</EMP_ADDR>
</EMPLOYEE>
</EMP_DETAILS>
</HEADER>
执行以下查询时,未获取任何结果。
select
XMLGET( SRC_XML,'@EMP_ID' ):"$"::string AS EMP_ID,XMLGET( SRC_XML,'@EMP_NAME' ):"$"::string AS EMP_NAME,XMLGET( emp.value,'@EMP_ADDR' ):"$"::string as EMP_ADDR
from
EMP_XML,lateral FLATTEN(EMP_XML.SRC_XML:"$") emp
where emp.value like '<employee>%'
你能帮我如何显示子标签值吗?
解决方法
创建示例数据:
CREATE OR REPLACE TABLE EMP_XML AS
SELECT
'<DATALOAD>
<HEADER>
<RECDATE>
<START>2021-03-02</START>
<END>2021-03-02</END>
</RECDATE>
<EMP_DETAILS>
<EMPLOYEE>
<EMP_ID>123</EMP_ID>
<EMP_NAME>ABC</EMP_NAME>
<EMP_ADDR>DETROIT</EMP_ADDR>
</EMPLOYEE>
<EMPLOYEE>
<EMP_ID>456</EMP_ID>
<EMP_NAME>XYZ</EMP_NAME>
<EMP_ADDR>RICHMOND</EMP_ADDR>
</EMPLOYEE>
</EMP_DETAILS>
</HEADER>
</DATALOAD>'::VARIANT AS SRC_XML;
查询(这里的关键点是PARSE_XML
):
SELECT
XMLGET(empd.value,'EMP_ID'):"$"::STRING AS EMP_ID,XMLGET(empd.value,'EMP_NAME'):"$"::STRING AS EMP_NAME,'EMP_ADDR'):"$"::STRING AS EMP_ADDR
FROM EMP_XML e,LATERAL (SELECT PARSE_XML(e.SRC_XML) src_xml) p,LATERAL FLATTEN(GET(p.SRC_XML,'$'):"$") emp,LATERAL FLATTEN(emp.value:"$") empd
WHERE empd.value LIKE '<EMPLOYEE>%';
输出:
+-----+--------+----------+----------+
| Row | EMP_ID | EMP_NAME | EMP_ADDR |
+-----+--------+----------+----------+
| 1 | 123 | ABC | DETROIT |
| 2 | 456 | XYZ | RICHMOND |
+-----+--------+----------+----------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。