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)