XMLGET
XMLGET
XMLGET 함수는 지정된 태그의 이름과 인스턴스 번호를 기준으로, 외부 XML 요소의 콘텐츠에서 XML 요소 객체(흔히 태그라 부름)를 추출해요.
출처: XMLGET
본문
XMLGET 함수는 지정된 태그의 이름과 인스턴스 번호를 기준으로, 외부 XML 요소의 콘텐츠에서 XML 요소 객체를 추출해요.
참고: XML 태그는 Snowflake 데이터 거버넌스 태그와 같지 않아요.
함께 보기: CHECK_XML, PARSE_XML, TO_XML
구문 (Syntax)
XMLGET( <expression> , <tag_name> [ , <instance_number> ] )
인자 (Arguments)
- expression — 요소를 추출할 표현식이에요. 표현식은
OBJECT(또는OBJECT를 포함하는VARIANT)로 평가되어야 해요.OBJECT는 Snowflake가 지원하는 내부 형식의 유효한 XML을 포함해야 해요. 일반적으로 해당OBJECT는 다음 중 하나로 생성됨을 의미해요:PARSE_XML함수 호출, 또는 데이터 로딩(예:COPY INTO <table>명령) 시 데이터가 XML 형식임을 지정.XMLGET함수는 해당 VARCHAR가 유효한 XML 텍스트를 포함하더라도VARCHAR표현식에서 직접 작동하지 않아요. - tag_name — 표현식에 저장된 XML 태그의 이름이에요.
- instance_number — XML에
tag_name의 여러 인스턴스가 포함되어 있으면instance_number를 사용해 검색할 인스턴스를 지정해요. 배열 인덱스처럼instance_number는 1 기반이 아닌 0 기반이에요.instance_number는 생략할 수 있으며, 생략하면 기본값 0이 사용돼요.
반환 (Returns)
반환 값의 데이터 타입은 OBJECT예요.
다음 경우에 함수는 NULL을 반환해요:
XMLGET의 인자 중 하나라도NULL인 경우.- 태그 인스턴스를 찾을 수 없는 경우.
자세한 내용은 사용 메모를 참조해요.
사용 메모 (Usage notes)
XMLGET의 결과는 태그의 콘텐츠(즉, 태그 사이의 텍스트)가 아니라 전체 요소(시작 태그, 콘텐츠 및 종료 태그)예요. 반환된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을 사용해 최외곽 요소를 추출할 수 없어요. 최외곽 요소를 얻으려면 표현식 자체를 선택해요.
예제 (Examples)
다음 예제는 XML을 포함하는 OBJECT가 있는 테이블을 만든 다음 XMLGET 함수를 사용해 해당 OBJECT에서 요소를 추출해요:
CREATE OR REPLACE 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 태그는 세 항목(텍스트와 두 개의 중첩 태그)을 포함하므로 GET은 이 항목들을 ARRAY로 반환해요. 중첩 태그는 OBJECT(키-값 쌍)로 표시되며, @ 속성은 중첩 태그 이름을, $ 속성은 중첩 태그 콘텐츠를 포함해요:
SELECT object_col,
GET(XMLGET(object_col, 'level2'), '$') AS content_of_element
FROM xml_demo;
+-------------------------+--------------------+
| OBJECT_COL | CONTENT_OF_ELEMENT |
|-------------------------+--------------------|
| <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') AS attribute
FROM xml_demo
WHERE ID = 1002;
+--------------------------------------------------+----------------+
| OBJECT_COL | ATTRIBUTE |
|--------------------------------------------------+----------------|
| <level1> | "my attribute" |
| 1 | |
| <level2 an_attribute="my attribute">2</level2> | |
| </level1> | |
+--------------------------------------------------+----------------+
더 알아보기 (Learn more)
- PARSE_XML
- CHECK_XML, TO_XML
- GET (반정형 데이터)
- 반정형 및 정형 데이터 함수 (Semi-structured and structured data functions)
- XML 작업 예제 (Examples of working with XML)