类别:

转换函数半结构化和结构化数据函数 (类型转换)

TO_XML

VARIANT 转换为包含该值的 XML 表示形式的 VARCHAR。如果输入为 NULL,则结果也是 NULL。

语法

TO_XML( <expression> )
Copy

实参

expression

计算结果为 VARIANT 或可以 转换 为 VARIANT 的表达式。

返回

返回值的数据类型是 VARCHAR。

使用说明

  • 此函数的常见用途包括:

    • 生成一个包含 XML 格式的值的字符串,该值与最初插入的 XML 格式的值匹配。

    • 将半结构化值(不一定最初要格式化为 XML)转换为 XML 格式的值。例如,可使用 TO_XML 为最初格式化为 JSON 的值生成兼容 XML 的表示形式。

  • 如果输入 expression 的计算结果不是 VARIANT,则 Snowflake 会隐式将表达式的结果 转换 为 VARIANT。由于所有其他 Snowflake 数据类型都可以转换为 VARIANT,这意味着可以将任何数据类型的值传递给 TO_XML 并转换为 XML 格式化的字符串。(GEOGRAPHY 数据类型为部分异常;要使用 GEOGRAPHY 类型的值调用 TO_XML,必须将该 GEOGRAPHY 值显式转换为 VARIANT。)

  • 如果值最初不是 XML 格式,则 Snowflake 会生成兼容 XML 的标签。这些标签可以使用 type 属性来指定标签内容的 Snowflake 数据类型。以下是 Snowflake 生成的标签的示例。

    最外层的标签对类似于以下内容:

    <SnowflakeData type="OBJECT"> </SnowflakeData>
    
    Copy

    在标签的 type 属性中指定的数据类型可能会有所不同。

    对于 OBJECT,每个键值对的标签都基于键。例如:

    <key1 type="VARCHAR">value1</key1>
    
    Copy

    对于 ARRAY,数组的每个元素都位于类似以下内容的标签对中:

    <e type="VARCHAR"> </e>
    
    Copy

    下面是包含两个键值对的简单 OBJECT 的 XML 的完整示例:

    <SnowflakeData type="OBJECT">
        <key1 type="VARCHAR">value1</key1>
        <key2 type="VARCHAR">value2</key2>
    </SnowflakeData>
    
    Copy

    下面是包含两个 VARCHAR 值的简单 ARRAY 的 XML 的完整示例:

    <SnowflakeData type="ARRAY">
        <e type="VARCHAR">v1</e>
        <e type="VARCHAR">v2</e>
    </SnowflakeData>
    
    Copy

示例

此示例演示在调用 PARSE_XML 将 XML 格式化的数据加载到 OBJECT 时如何使用此函数。

创建表和数据:

CREATE TABLE xml2 (x OBJECT);
INSERT INTO xml2 (x)
  SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');
Copy

调用 TO_XML() 和 TO_VARCHAR() 函数:

SELECT x, TO_VARCHAR(x), TO_XML(x)
    FROM xml2;
+---------------------------+--------------------------------------+--------------------------------------+
| X                         | TO_VARCHAR(X)                        | TO_XML(X)                            |
|---------------------------+--------------------------------------+--------------------------------------|
| <note>                    | <note><body>Sample XML</body></note> | <note><body>Sample XML</body></note> |
|   <body>Sample XML</body> |                                      |                                      |
| </note>                   |                                      |                                      |
+---------------------------+--------------------------------------+--------------------------------------+
Copy

您还可以使用最初不是 XML 格式的数据调用 TO_XML(),如以下示例所示。

下面创建一个简单 OBJECT,然后生成相应的 XML。XML 输出包含有关键值对中值的数据类型的信息,以及整个值 (OBJECT) 的数据类型:

CREATE TABLE xml_03 (object_col_1 OBJECT);
INSERT INTO xml_03 (object_col_1)
    SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');
Copy
SELECT object_col_1,
       TO_XML(object_col_1)
    FROM xml_03;
+---------------------+-------------------------------------------------------------------------------------------------------------------+
| OBJECT_COL_1        | TO_XML(OBJECT_COL_1)                                                                                              |
|---------------------+-------------------------------------------------------------------------------------------------------------------|
| {                   | <SnowflakeData type="OBJECT"><key1 type="VARCHAR">value1</key1><key2 type="VARCHAR">value2</key2></SnowflakeData> |
|   "key1": "value1", |                                                                                                                   |
|   "key2": "value2"  |                                                                                                                   |
| }                   |                                                                                                                   |
+---------------------+-------------------------------------------------------------------------------------------------------------------+
Copy

下面创建一个简单 ARRAY,然后生成相应的 XML。XML 输出包含有关数组元素的数据类型的信息,以及整个值 (ARRAY) 的数据类型:

CREATE TABLE xml_04 (array_col_1 ARRAY);
INSERT INTO xml_04 (array_col_1)
    SELECT ARRAY_CONSTRUCT('v1', 'v2');
Copy
SELECT array_col_1,
       TO_XML(array_col_1)
    FROM xml_04;
+-------------+----------------------------------------------------------------------------------------------+
| ARRAY_COL_1 | TO_XML(ARRAY_COL_1)                                                                          |
|-------------+----------------------------------------------------------------------------------------------|
| [           | <SnowflakeData type="ARRAY"><e type="VARCHAR">v1</e><e type="VARCHAR">v2</e></SnowflakeData> |
|   "v1",     |                                                                                              |
|   "v2"      |                                                                                              |
| ]           |                                                                                              |
+-------------+----------------------------------------------------------------------------------------------+
Copy

以下代码插入 JSON 格式的数据,然后生成相应的 XML:

CREATE TABLE xml_05 (json_col_1 VARIANT);
INSERT INTO xml_05 (json_col_1)
    SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');
Copy
SELECT json_col_1,
       TO_JSON(json_col_1),
       TO_XML(json_col_1)
    FROM xml_05;
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+
| JSON_COL_1  | TO_JSON(JSON_COL_1)  | TO_XML(JSON_COL_1)                                                                                                      |
|-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------|
| {           | {"key1":["a1","a2"]} | <SnowflakeData type="OBJECT"><key1 type="ARRAY"><e type="VARCHAR">a1</e><e type="VARCHAR">a2</e></key1></SnowflakeData> |
|   "key1": [ |                      |                                                                                                                         |
|     "a1",   |                      |                                                                                                                         |
|     "a2"    |                      |                                                                                                                         |
|   ]         |                      |                                                                                                                         |
| }           |                      |                                                                                                                         |
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+
Copy
语言: 中文