카테고리:

변환 함수 , 반정형 및 정형 데이터 함수 (캐스트)

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