PARSE_XML

PARSE_XML

PARSE_XML 함수는 입력 문자열을 XML 문서로 해석해 OBJECT 값을 생성해요. 입력이 NULL이면 출력도 NULL이에요.

참고: CHECK_XML, TO_XML, XMLGET도 참조하세요.

출처: 문서

본문

문법 (Syntax)

PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
PARSE_XML( STR => <string_containing_xml>
  [ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )

인자 (Arguments)

필수 (Required):

  • string_containing_xml 또는 STR => string_containing_xml — 유효한 XML을 포함하는 VARCHAR 값으로 평가되는 표현식을 지정하세요.

선택 (Optional):

  • disable_auto_convert 또는 DISABLE_AUTO_CONVERT => disable_auto_convert — string_containing_xml 안의 숫자(numeric) 및 부울(Boolean) 값을 Snowflake 데이터 타입으로 변환하려고 시도할지 여부를 지정하는 부울 표현식이에요. (이 변환에 대한 자세한 내용은 아래 사용 메모를 참조하세요.) 이 값들을 변환하고 싶지 않으면 이 인자를 TRUE로 설정하세요. 이 설정은 CREATE FILE FORMAT의 DISABLE_AUTO_CONVERT 파라미터와 비슷한 효과를 가져요. 이 값들을 변환하고 싶으면 이 인자를 FALSE로 설정하거나 생략하세요. 기본값: FALSE

반환 (Returns)

반환 값의 데이터 타입은 OBJECT예요. OBJECT에는 XML의 내부 표현이 포함돼요.

사용 메모 (Usage notes)

  • 인자를 위치와 이름으로 혼합할 때는 모든 위치 인자가 모든 이름 인자보다 먼저 와야 해요.
  • 인자를 이름으로 지정할 때는 인자 이름을 큰따옴표로 감쌀 수 없어요.
  • XML 문서의 모든 요소 내용은 텍스트예요. PARSE_XML은 일부 XML 데이터를 텍스트에서 네이티브(Snowflake SQL)로 변환하려고 시도해요. 자세한 내용은 SQL 데이터 타입 참조를 확인하세요.
    • NUMERIC 및 BOOLEAN: PARSE_XML은 명백히 숫자 및 부울인 값을 이 값들을 다시 출력해도 텍스트적으로 동일한 결과가 나오는 방식으로 네이티브 표현으로 변환하려고 시도해요. 예를 들어 소수를 파싱할 때 PARSE_XML은 123.45를 DOUBLE이 아닌 NUMBER(5,2)로 취급해 표현의 정확성을 보존하려고 해요. 다만: 지수 표기법(즉 1.2345e+02)의 숫자나 범위·스케일 한계로 고정 소수점 소수로 저장할 수 없는 숫자는 DOUBLE로 저장돼요. XML 요소의 내용이 소수점 이하 자릿수가 있는 숫자면 PARSE_XML은 뒤쪽 0을 잘라낼 수 있어요. 이 변환을 수행하고 싶지 않으면 disable_auto_convert 인자에 TRUE를 전달하세요.
    • TIMESTAMP, DATE, TIME, BINARY: XML은 TIMESTAMP, DATE, TIME, BINARY 같은 값을 네이티브로 표현하지 않으므로 이들을 XML에서 문자열로 나타내야 해요. PARSE_XML은 이 값들을 자동으로 인식하지 않아요. 문자열로 유지되므로 필요하면 이 값들을 문자열에서 네이티브 SQL 데이터 타입으로 변환하세요.
  • XML 속성은 순서가 없는 이름/값 쌍의 집합이에요. PARSE_XML 함수는 반드시 순서를 보존하지는 않아요. 예를 들어 텍스트를 XML로, 다시 텍스트로 변환하면 원래 정보가 다른 순서로 담긴 문자열이 나올 수 있어요.
  • 문자열에서 XML로 변환할 때 요소 사이의 공백에 변화가 생길 수 있어요.
  • PARSE_XML을 사용해 정수(예: INT 또는 INTEGER)와 소수 표기 값(예: NUMBER 또는 FLOAT)이 섞인 숫자 값을 VARIANT 열에 삽입하면 함수가 값에 뒤쪽 0을 추가할 수 있어요. 다음 예제는 PARSE_XML을 사용해 정수 값과 소수 표기 값을 섞어 VARIANT 열에 삽입해요: CREATE OR REPLACE TABLE test_xml_table(xmlcol VARIANT); INSERT INTO test_xml_table ( SELECT PARSE_XML($1) FROM VALUES ('<c>3.1</c>'), ('<e>2</e>'), ('<b>0.123</b>')); 테이블을 조회해요: SELECT * FROM test_xml_table; 출력: 첫 두 행의 값에 뒤쪽 0이 추가된 것을 보여줘요.

예제 (Examples)

다음 예제는 PARSE_XML 함수를 사용해 XML 문자열을 OBJECT 열에 삽입할 수 있는 OBJECT로 변환하는 방법을 보여줘요:

CREATE OR REPLACE TABLE xtab (v OBJECT);

INSERT INTO xtab SELECT PARSE_XML(column1) AS v
  FROM VALUES ('<a/>'), ('<a attr="123">text</a>'), ('<a><b>X</b><b>Y</b></a>');

SELECT * FROM xtab;
+------------------------+
| V                      |
|------------------------|
| <a></a>                |
| <a attr="123">text</a> |
| <a>                    |
|   <b>X</b>             |
|   <b>Y</b>             |
| </a>                   |
+------------------------+

다음 예제는 숫자 값 변환의 사용과 비활성화의 차이를 보여줘요. 이 예제에서 변환이 비활성화되지 않으면 함수는 지수 표기법의 숫자를 DOUBLE로 해석해요.

SELECT PARSE_XML('<test>22257e111</test>'), PARSE_XML('<test>22257e111</test>', TRUE);
+-------------------------------------+-------------------------------------------+
| PARSE_XML('<TEST>22257E111</TEST>') | PARSE_XML('<TEST>22257E111</TEST>', TRUE) |
|-------------------------------------+-------------------------------------------|
| <test>2.225700000000000e+115</test> | <test>22257e111</test>                    |
+-------------------------------------+-------------------------------------------+

다음 예제는 함수에 인자를 이름으로 지정하는 방법을 보여줘요:

SELECT PARSE_XML(STR => '<test>22257e111</test>', DISABLE_AUTO_CONVERT => TRUE);
+--------------------------------------------------------------------------+
| PARSE_XML(STR => '<TEST>22257E111</TEST>', DISABLE_AUTO_CONVERT => TRUE) |
|--------------------------------------------------------------------------|
| <test>22257e111</test>                                                   |
+--------------------------------------------------------------------------+

더 알아보기 (Learn more)