- 카테고리:
반정형 데이터 함수 (추출)
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이 사용됩니다.
사용법 노트¶
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> | |
+--------------------------------------------------+----------------------------------------------------+