TO_XML

TO_XML (XML로 변환)

VARIANT를 값의 XML 표현을 담은 VARCHAR로 변환해요. 입력이 NULL이면 결과도 NULL이에요.

출처: Snowflake SQL Reference - TO_XML

본문

참고: CHECK_XML, PARSE_XML, XMLGET

구문

TO_XML( <expression> )

인자

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 호환 태그를 생성해요. 이 태그들은 태그 내용의 Snowflake 데이터 타입을 지정하기 위해 type 속성을 사용할 수 있어요. 아래는 Snowflake가 생성하는 태그의 예시예요.

    가장 바깥쪽 태그 쌍은 다음과 비슷해요.

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

    태그의 type 속성에 지정된 데이터 타입은 달라질 수 있어요.

    OBJECT의 경우 각 키-값 쌍의 태그는 키에 기반해요. 예를 들어:

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

    ARRAY의 경우 배열의 각 요소는 다음과 비슷한 태그 쌍 안에 있어요.

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

    두 개의 키-값 쌍을 담은 간단한 OBJECT에 대한 XML의 전체 예시는 다음과 같아요.

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

    두 개의 VARCHAR 값을 담은 간단한 ARRAY에 대한 XML의 전체 예시는 다음과 같아요.

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

예시

이 예시는 PARSE_XML을 호출해 XML 형식 데이터를 OBJECT로 로드한 경우 함수를 사용하는 방법을 보여줘요.

테이블을 만들고 데이터를 삽입해요.

CREATE OR REPLACE TABLE xml_02 (x OBJECT);

INSERT INTO xml_02 (x)
 SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');

TO_XML과 TO_VARCHAR 함수를 호출해요.

SELECT x, TO_VARCHAR(x), TO_XML(x) FROM xml_02;
+---------------------------+--------------------------------------+--------------------------------------+
| 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>                   |                                      |                                      |
+---------------------------+--------------------------------------+--------------------------------------+

아래 예시들처럼 원래 XML 형식 데이터가 아닌 데이터로 TO_XML 함수를 호출할 수도 있어요.

다음 예시는 간단한 OBJECT를 만들고 해당 XML을 생성해요. XML 출력에는 키-값 쌍 값들의 데이터 타입과 전체 값의 데이터 타입(OBJECT)에 대한 정보가 포함돼요.

CREATE OR REPLACE TABLE xml_03 (object_col_1 OBJECT);

INSERT INTO xml_03 (object_col_1)
 SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');
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"  |                                                                                                                   |
| }                   |                                                                                                                   |
+---------------------+-------------------------------------------------------------------------------------------------------------------+

다음 예시는 간단한 ARRAY를 만들고 해당 XML을 생성해요. XML 출력에는 배열 요소들의 데이터 타입과 전체 값의 데이터 타입(ARRAY)에 대한 정보가 포함돼요.

CREATE OR REPLACE TABLE xml_04 (array_col_1 ARRAY);

INSERT INTO xml_04 (array_col_1)
 SELECT ARRAY_CONSTRUCT('v1', 'v2');
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"      |                                                                                              |
| ]           |                                                                                              |
+-------------+----------------------------------------------------------------------------------------------+

다음 예시는 JSON 형식의 데이터를 삽입하고 해당 XML을 생성해요.

CREATE OR REPLACE TABLE xml_05 (json_col_1 VARIANT);

INSERT INTO xml_05 (json_col_1)
 SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');
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"    |                      |                                                                                                                         |
|   ]         |                      |                                                                                                                         |
| }           |                      |                                                                                                                         |
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+

더 알아보기