Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Snowflake UI查询具有嵌套标记的XML_Xml_Snowflake Cloud Data Platform_Snowflake Schema - Fatal编程技术网

通过Snowflake UI查询具有嵌套标记的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>

我试图使用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>   

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 |
+-----+--------+----------+----------+