Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Extraktion)

XMLGET

Extrahiert ein XML-Elementobjekt (oft einfach als Tag bezeichnet) aus dem Inhalt des äußeren XML-Elements, basierend auf dem Namen und der Instanznummer des angegebenen Tags.

(Beachten Sie, dass ein XML-Tag nicht dasselbe ist wie ein Data Governance-Tag in Snowflake).

Siehe auch:

CHECK_XML, PARSE_XML, TO_XML

Syntax

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

Argumente

expression

Der Ausdruck, aus dem das Element extrahiert werden soll.

Der Ausdruck muss ein OBJECT ergeben (oder einen VARIANT-Wert, der ein OBJECT enthält). Das OBJECT muss gültige XML in dem von Snowflake unterstützten internen Format enthalten. In der Regel bedeutet das, dass OBJECT durch eine der folgenden Aktionen erstellt wurde:

  • Aufruf der Funktion PARSE_XML

  • Laden der Daten (z. B. über den Befehl COPY INTO <Tabelle>) und Angabe, dass die Daten im XML-Format vorliegen.

Die Funktion XMLGET wirkt nicht direkt auf einen VARCHAR-Ausdruck, auch wenn dieser VARCHAR gültigen XML-Text enthält.

tag_name

Der Name eines XML-Tags, der in expression gespeichert ist.

instance_number

Wenn XML mehrere Instanzen von tag_name enthält, dann verwenden Sie die Nummer der Instanz instance_number, um anzugeben, welche Instanz abgerufen werden soll. Wie ein Array-Index ist auch die instance_number 0-basiert, nicht 1-basiert.

instance_number kann weggelassen werden. In diesem Fall wird der Standardwert 0 verwendet.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist OBJECT.

Die Funktion gibt in den folgenden Fällen NULL zurück:

  • Wenn ein Argument von XMLGET NULL ist.

  • Wenn die Tag-Instanz nicht gefunden wird.

Weitere Informationen dazu finden Sie in den Nutzungshinweisen.

Nutzungshinweise

  • Das Ergebnis von XMLGET ist nicht der Inhalt des Tags (d. h. der Text zwischen den Tags), sondern das gesamte Element (das öffnende Tag, der Inhalt und das schließende Tag). Aus dem zurückgegebenen OBJECT-Wert können Sie mit der Funktion GET den Tag-Namen, die Attributwerte des Tags und den Inhalt des Elements (einschließlich verschachtelter Tags) extrahieren:

    • Verwenden Sie GET(tag, '@attrname'), um Attributwerte zu extrahieren.

    • Verwenden Sie zum Extrahieren des Inhalts GET(tag, '$').

    • Verwenden Sie GET(tag, '@'), um den Tag-Namen zu extrahieren.

  • Sie können verschachtelte Tags extrahieren, indem Sie XMLGET-Funktionsaufrufe verschachteln. Beispiel:

    SELECT XMLGET(XMLGET(my_xml_column, 'my_tag'), 'my_inner_tag') ...;
    
    Copy
  • Die Positionen der inneren Tags im Inhalt können mit GET(tag, 'inner-tag-name') ermittelt werden. Wenn der Inhalt mehrere Elemente enthält, werden die Positionen als Array dargestellt.

  • Sie können XMLGET nicht verwenden, um das äußerste Element zu extrahieren. Um das äußerste Element zu erhalten, wählen Sie das expression selbst aus.

Beispiele

Das folgende Beispiel erstellt eine Tabelle mit einem OBJECT, das XML enthält, und verwendet dann die Funktion XMLGET, um Elemente aus diesem OBJECT zu extrahieren.

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>               |                              |                                                   |
+-------------------------+------------------------------+---------------------------------------------------+

In diesem Beispiel wird gezeigt, wie GET mit XMLGET verwendet wird, um den Inhalt eines Elements abzurufen. Im Beispiel enthält das Tag level2 drei Elemente (Text und zwei verschachtelte Tags), sodass GET diese Elemente in einem ARRAY zurückgibt. Die verschachtelten Tags werden durch OBJECTs (Schlüssel-Wert-Paare) repräsentiert. Die Eigenschaft @ enthält den Namen des verschachtelten Tags und die Eigenschaft $ enthält den Inhalt des verschachtelten Tags.

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"  |
|                         |   }                |
|                         | ]                  |
+-------------------------+--------------------+

Das folgende Beispiel zeigt, wie GET mit XMLGET verwendet wird, um das Attribut eines Tags abzurufen.

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>                                        |                |
+--------------------------------------------------+----------------+

Bemerkung

Weitere Beispiele für Abfragen, die die Funktion XMLGET verwenden, finden Sie unter Beispiele für die Arbeit mit XML.