- 카테고리:
반정형 및 정형 데이터 함수 (추출)
XMLGET¶
지정된 태그의 이름과 인스턴스 번호를 기준으로 외부 XML 요소의 내용에서 XML 요소 오브젝트(종종 간단히 태그 라고도 함)를 추출합니다.
(XML 태그는 Snowflake 데이터 거버넌스 태그 와 동일하지 않습니다.)
XMLGET의 어떤 인자가 NULL인 경우, 결과는 NULL입니다.
태그 인스턴스를 찾을 수 없는 경우, 결과는 NULL입니다.
구문¶
XMLGET( <expression> , <tag_name> [ , <instance_number> ] )
인자¶
expression
요소를 추출할 식입니다.
식은 OBJECT (또는 OBJECT를 포함하는 VARIANT)로 평가되어야 합니다. OBJECT에는 Snowflake가 지원하는 내부 형식의 유효한 XML이 포함되어야 합니다. 일반적으로 이는 OBJECT가 다음 중 하나에 의해 생성되었음을 의미합니다.
PARSE_XML 함수 호출.
데이터 로딩(예: COPY INTO <테이블> 명령을 통해) 및 데이터가 XML 형식임을 지정.
XMLGET 함수는 VARCHAR에 유효한 XML 텍스트가 포함되어 있어도 VARCHAR 식에서 직접 작동하지 않습니다.
tag_name
expression
에 저장된 XML 태그의 이름입니다.instance_number
XML에
tag_name
의 인스턴스가 여러 개 포함된 경우instance_number
를 사용하여 검색할 인스턴스를 지정합니다. 배열 인덱스와 마찬가지로,instance_number
는 1이 아닌 0부터 시작합니다.instance_number
는 생략할 수 있으며, 이 경우 기본값 0이 사용됩니다.
반환¶
반환된 값의 데이터 타입은 OBJECT 입니다.
자세한 내용은 사용법 노트를 참조하십시오.
사용법 노트¶
XMLGET의 결과는 태그의 내용(즉, 태그 사이의 텍스트)이 아닌 전체 요소(여는 태그, 내용, 닫는 태그)입니다. 반환 값은 OBJECT 입니다. 이 OBJECT에서는 GET 함수를 사용하여 태그 이름, 태그의 속성 값 및 요소의 내용(중첩 태그 포함)을 추출할 수 있습니다.
속성 값을 추출하려면
GET(tag, '@attrname')
을 사용하십시오.내용을 추출하려면
GET(tag, '$')
를 사용하십시오.태그 이름을 추출하려면
GET(tag, '@')
을 사용하십시오.
XMLGET() 호출을 중첩하여 중첩 태그를 추출할 수 있습니다. 예:
select xmlget(xmlget(my_xml_column, 'my_tag'), 'my_inner_tag') ...;
콘텐츠에서 내부 태그의 위치는
GET(tag, 'inner-tag-name')
을 사용하여 얻을 수 있습니다. 콘텐츠에 여러 요소가 포함된 경우, 위치는 배열로 표시됩니다.XMLGET을 사용하면 가장 바깥쪽 요소를 추출할 수 없습니다. 가장 바깥쪽 요소를 가져오려면
expression
자체를 선택하면 됩니다.
예¶
다음 예에서는 XML이 포함된 OBJECT가 있는 테이블을 생성한 후 XMLGET()를 사용하여 해당 OBJECT에서 요소를 추출합니다.
CREATE TABLE xml_demo (ID INTEGER, object_col OBJECT);
INSERT INTO xml_demo (id, object_col)
SELECT 1001,
PARSE_XML('<level1> 1 <level2> 2 <level3> 3A </level3> <level3> 3B </level3> </level2> </level1>');
SELECT object_col,
XMLGET(object_col, 'level2'),
XMLGET(XMLGET(object_col, 'level2'), 'level3', 1)
FROM xml_demo;
+-------------------------+------------------------------+---------------------------------------------------+
| OBJECT_COL | XMLGET(OBJECT_COL, 'LEVEL2') | XMLGET(XMLGET(OBJECT_COL, 'LEVEL2'), 'LEVEL3', 1) |
|-------------------------+------------------------------+---------------------------------------------------|
| <level1> | <level2> | <level3>3B</level3> |
| 1 | 2 | |
| <level2> | <level3>3A</level3> | |
| 2 | <level3>3B</level3> | |
| <level3>3A</level3> | </level2> | |
| <level3>3B</level3> | | |
| </level2> | | |
| </level1> | | |
+-------------------------+------------------------------+---------------------------------------------------+
이 예에서는 GET()과 XMLGET()을 함께 사용하여 요소의 내용을 검색하는 방법을 보여줍니다. 이 예에서 level2
태그에는 3개의 항목(텍스트 1개 및 중첩 태그 2개)이 포함되어 있으므로 GET에서는 이러한 항목을 ARRAY 로 반환합니다. 중첩 태그는 OBJECTs(키-값 페어)로 표시됩니다. @
속성은 중첩된 태그 이름을 포함하고 $
속성은 중첩된 태그 내용을 포함합니다.
SELECT object_col,
GET(XMLGET(object_col, 'level2'), '$')
FROM xml_demo;
+-------------------------+----------------------------------------+
| OBJECT_COL | GET(XMLGET(OBJECT_COL, 'LEVEL2'), '$') |
|-------------------------+----------------------------------------|
| <level1> | [ |
| 1 | 2, |
| <level2> | { |
| 2 | "$": "3A", |
| <level3>3A</level3> | "@": "level3" |
| <level3>3B</level3> | }, |
| </level2> | { |
| </level1> | "$": "3B", |
| | "@": "level3" |
| | } |
| | ] |
+-------------------------+----------------------------------------+
이 예에서는 GET()과 함께 XMLGET()을 사용하여 태그의 속성을 검색하는 방법을 보여줍니다.
INSERT INTO xml_demo (id, object_col)
SELECT 1002,
PARSE_XML('<level1> 1 <level2 an_attribute="my attribute"> 2 </level2> </level1>');
SELECT object_col,
GET(XMLGET(object_col, 'level2'), '@an_attribute')
FROM xml_demo
WHERE ID = 1002;
+--------------------------------------------------+----------------------------------------------------+
| OBJECT_COL | GET(XMLGET(OBJECT_COL, 'LEVEL2'), '@AN_ATTRIBUTE') |
|--------------------------------------------------+----------------------------------------------------|
| <level1> | "my attribute" |
| 1 | |
| <level2 an_attribute="my attribute">2</level2> | |
| </level1> | |
+--------------------------------------------------+----------------------------------------------------+