通过Snowflake UI查询具有嵌套标记的XML
我试图使用Snowflake中的横向展平函数查询包含嵌套标记的XML。我无法遍历并获得所需格式的结果 表EMP_XML有一个变量列SRC_XML,其中包含以下XML值-通过Snowflake UI查询具有嵌套标记的XML,xml,snowflake-cloud-data-platform,snowflake-schema,Xml,Snowflake Cloud Data Platform,Snowflake Schema,我试图使用Snowflake中的横向展平函数查询包含嵌套标记的XML。我无法遍历并获得所需格式的结果 表EMP_XML有一个变量列SRC_XML,其中包含以下XML值- <DATALOAD> <HEADER> <RECDATE> <START>2021-03-02</START> <END>2021-03-02</END> </RECDATE>
<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>
2021-03-02
2021-03-02
123
基础知识
底特律
456
XYZ
里士满
执行下面的查询时,未提取任何结果
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>%'
选择
XMLGET(SRC_XML,@EMP_ID'):“$”::字符串作为EMP_ID
,XMLGET(SRC_XML,@EMP_NAME'):“$”::字符串作为EMP_NAME
,XMLGET(emp.value,@emp_ADDR'):“$”::字符串作为emp_ADDR
从…起
EMP_XML
,横向展平(EMP_XML.SRC_XML:“$”)EMP
其中emp.value类似于“%”
您能帮助我如何显示子标记值吗?创建示例数据:
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;
输出:
+-----+--------+----------+----------+
| Row | EMP_ID | EMP_NAME | EMP_ADDR |
+-----+--------+----------+----------+
| 1 | 123 | ABC | DETROIT |
| 2 | 456 | XYZ | RICHMOND |
+-----+--------+----------+----------+
当XML按照您建议的方式加载到表中时,上述解决方案就起作用了。在表中,我在每一行后面都看到\n个字符,但在我的表中,我没有看到\n个字符。当我执行
SELECT*FROM EMP_XML e,LATERAL(SELECT PARSE_XML(e.SRC_XML)SRC_XML)p,LATERAL flatte(GET(p.SRC_XML,“$”):“$”)EMP
+-----+--------+----------+----------+
| Row | EMP_ID | EMP_NAME | EMP_ADDR |
+-----+--------+----------+----------+
| 1 | 123 | ABC | DETROIT |
| 2 | 456 | XYZ | RICHMOND |
+-----+--------+----------+----------+