PARSE_XML
PARSE_XML
PARSE_XML 함수는 입력 문자열을 XML 문서로 해석해 OBJECT 값을 생성해요. 입력이 NULL이면 출력도 NULL이에요.
출처: 문서
본문
문법 (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> |
+--------------------------------------------------------------------------+