카테고리:

반정형 및 정형 데이터 함수 (추출)

XMLGET

지정된 태그의 이름과 인스턴스 번호를 기준으로 외부 XML 요소의 내용에서 XML 요소 오브젝트(종종 간단히 태그 라고도 함)를 추출합니다.

(XML 태그는 Snowflake 데이터 거버넌스 태그 와 동일하지 않습니다.)

참고 항목:

CHECK_XML, PARSE_XML, TO_XML

구문

XMLGET( <expression> , <tag_name> [ , <instance_number> ] )
Copy

인자

expression

요소를 추출할 식입니다.

식은 OBJECT (또는 OBJECT를 포함하는 VARIANT)로 평가되어야 합니다. OBJECT에는 Snowflake가 지원하는 내부 형식의 유효한 XML이 포함되어야 합니다. 일반적으로 이는 OBJECT가 다음 중 하나에 의해 생성되었음을 의미합니다.

XMLGET 함수는 VARCHAR에 유효한 XML 텍스트가 포함되어 있어도 VARCHAR 식에서 직접 작동하지 않습니다.

tag_name

expression 에 저장된 XML 태그의 이름입니다.

instance_number

XML에 tag_name 의 인스턴스가 여러 개 포함된 경우 instance_number 를 사용하여 검색할 인스턴스를 지정합니다. 배열 인덱스와 마찬가지로, instance_number 는 1이 아닌 0부터 시작합니다.

instance_number 는 생략할 수 있으며, 이 경우 기본값 0이 사용됩니다.

반환

반환된 값의 데이터 타입은 OBJECT 입니다.

다음의 경우 함수는 NULL을 반환합니다.

  • XMLGET 의 인자가 NULL 인 경우.

  • 태그 인스턴스를 찾을 수 없는 경우.

자세한 내용은 사용법 노트를 참조하십시오.

사용법 노트

  • XMLGET 의 결과는 태그의 내용(즉, 태그 사이의 텍스트)이 아닌 전체 요소(여는 태그, 내용, 닫는 태그)입니다. 반환된 OBJECT 값에서는 GET 함수를 사용하여 태그 이름, 태그의 속성 값 및 요소의 내용(중첩 태그 포함)을 추출할 수 있습니다.

    • 속성 값을 추출하려면 GET(tag, '@attrname') 을 사용하십시오.

    • 내용을 추출하려면 GET(tag, '$') 를 사용하십시오.

    • 태그 이름을 추출하려면 GET(tag, '@') 을 사용하십시오.

  • XMLGET 함수 호출을 중첩하여 중첩된 태그를 추출할 수 있습니다. 예:

    SELECT XMLGET(XMLGET(my_xml_column, 'my_tag'), 'my_inner_tag') ...;
    
    Copy
  • 콘텐츠에서 내부 태그의 위치는 GET(tag, 'inner-tag-name') 을 사용하여 얻을 수 있습니다. 콘텐츠에 여러 요소가 포함된 경우 위치는 배열로 표시됩니다.

  • XMLGET 을 사용하면 가장 바깥쪽 요소를 추출할 수 없습니다. 가장 바깥쪽 요소를 가져오려면 expression 자체를 선택합니다.

다음 예에서는 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>');
Copy
SELECT object_col,
       XMLGET(object_col, 'level2'),
       XMLGET(XMLGET(object_col, 'level2'), 'level3', 1)
  FROM xml_demo;
Copy
+-------------------------+------------------------------+---------------------------------------------------+
| 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'), '$') AS content_of_element
  FROM xml_demo;
Copy
+-------------------------+--------------------+
| 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>');
Copy
SELECT object_col,
       GET(XMLGET(object_col, 'level2'), '@an_attribute') AS attribute
  FROM xml_demo
  WHERE ID = 1002;
Copy
+--------------------------------------------------+----------------+
| OBJECT_COL                                       | ATTRIBUTE      |
|--------------------------------------------------+----------------|
| <level1>                                         | "my attribute" |
|   1                                              |                |
|   <level2 an_attribute="my attribute">2</level2> |                |
| </level1>                                        |                |
+--------------------------------------------------+----------------+

참고

XMLGET 함수를 사용하는 쿼리의 더 많은 예는 XML 작업의 예 섹션을 참조하십시오.