- 카테고리:
반정형 및 정형 데이터 함수 (구문 분석)
PARSE_XML¶
입력 문자열을 XML 문서로 해석하여 OBJECT 값을 생성합니다. 입력이 NULL이면 출력은 NULL입니다.
구문¶
PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
PARSE_XML( STR => <string_containing_xml>
[ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )
인자¶
필수:
string_containing_xml
. OR .STR => string_containing_xml
유효한 XML 을 포함하는 VARCHAR 값으로 평가되는 식을 지정합니다.
선택 사항:
disable_auto_convert
. OR .DISABLE_AUTO_CONVERT => disable_auto_convert
함수가
string_containing_xml
의 숫자 값과 부울 값을 Snowflake 데이터 타입으로 변환해야 하는지 여부를 지정하는 부울 식. (이 변환에 대한 자세한 내용은 아래 사용법 노트 를 참조하십시오.)함수가 이러한 값을 변환하지 않도록 하려면 이 인자를
TRUE
로 설정하십시오. 이 설정은 CREATE FILE FORMAT 의DISABLE_AUTO_CONVERT
매개 변수와 유사한 효과를 갖습니다.함수가 이러한 값을 변환하도록 하려면 이 인자를
FALSE
로 설정하거나 이 인자를 생략하십시오.
기본값:
FALSE
반환¶
반환된 값의 데이터 타입은 OBJECT입니다. OBJECT에는 XML의 내부 표시가 포함됩니다.
사용법 노트¶
이름 또는 위치로 모든 인자를 지정해야 합니다. 일부 인자는 이름으로, 다른 인자는 위치로 지정할 수는 없습니다.
이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.
XML 문서의 모든 요소의 내용은 텍스트입니다. PARSE_XML 은 일부 XML 데이터를 텍스트에서 네이티브(Snowflake SQL)로 변환하려고 시도합니다. 자세한 내용은 SQL 데이터 타입 참조 섹션을 참조하십시오.
NUMERIC 및 BOOLEAN:
PARSE_XML은 명백한 숫자 및 부울 값을 다시 출력하여 텍스트 측면에서 동일한 결과를 생성하는 방식으로 이러한 값을 기본 표현으로 변환하려고 시도합니다. 예를 들어, 십진수를 구문 분석할 때 PARSE_XML은 123.45를 DOUBLE이 아닌 NUMBER(5,2)로 처리하여 표현의 정확성을 유지하려고 시도합니다. 하지만:
과학적 표기법의 숫자(즉, 1.2345e+02)나, 범위 또는 스케일 제한으로 인해 고정 소수점 10진수로 저장할 수 없는 숫자는 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)와 10진수 표기법의 값(예: 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;
+--------------+ | XMLCOL | |--------------| | <c>3.100</c> | | <e>2.000</e> | | <b>0.123</b> | +--------------+
출력에는 처음 두 행의 값에 후행 0이 추가되었음을 보여줍니다.
예¶
다음 예제에서는 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> |
+--------------------------------------------------------------------------+