Kategorien:

Konvertierungsfunktionen, Funktionen für semistrukturierte und strukturierte Daten (Umwandlung)

TO_XML

Wandelt einen VARIANT-Wert in einen VARCHAR-Wert um, der eine XML-Darstellung des Wertes enthält. Wenn der Eingabewert NULL ist, ist auch das Ergebnis NULL.

Syntax

TO_XML( <expression> )
Copy

Argumente

expression

Ein Ausdruck, der einen Wert vom Typ VARIANT ergibt oder der in einen VARIANT-Wert umgewandelt werden kann.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist VARCHAR.

Nutzungshinweise

  • Diese Funktion wird häufig für Folgendes verwendet:

    • Generierung einer Zeichenfolge, die einen XML-formatierten Wert enthält, der mit einem ursprünglich eingefügten XML-formatierten Wert übereinstimmt.

    • Umwandlung eines semistrukturierten Wertes (der ursprünglich nicht unbedingt als XML formatiert sein muss) in einen XML-formatierten Wert. Sie können zum Beispiel TO_XML verwenden, um eine XML-kompatible Darstellung eines Wertes zu generieren, der ursprünglich als JSON formatiert war.

  • Wenn der Eingabeausdruck expression keinen VARIANT-Wert ergibt, führt Snowflake implizit eine Umwandlung des Ergebnisses des Ausdrucks in einen VARIANT-Wert aus. Da alle anderen Snowflake-Datentypen in einen VARIANT-Wert umgewandelt werden können, bedeutet dies, dass ein Wert eines beliebigen Datentyps an TO_XML übergeben und in eine XML-formatierte Zeichenfolge umgewandelt werden kann. (Der Datentyp GEOGRAPHY stellt teilweise eine Ausnahme dar: Um TO_XML mit einem Wert vom Typ GEOGRAPHY aufzurufen, müssen Sie den GEOGRAPHY-Wert explizit in einen VARIANT-Wert umwandeln).

  • Wenn der Wert ursprünglich kein XML-Wert war, generiert Snowflake XML-kompatible Tags. Diese Tags können das Attribut type verwenden, um den Snowflake-Datentyp des Tag-Inhalts anzugeben. Nachstehend finden Sie Beispiele für von Snowflake generierte Tags.

    Das äußerste Tag-Paar sieht ungefähr wie folgt aus:

    <SnowflakeData type="OBJECT"> </SnowflakeData>
    
    Copy

    Der im Attribut type des Tags angegebene Datentyp kann variieren.

    Bei einem OBJECT basieren die Tags jedes Schlüssel-Wert-Paares auf dem Schlüssel. Beispiel:

    <key1 type="VARCHAR">value1</key1>
    
    Copy

    Bei einem ARRAY ist jedes Element des Arrays in einem Tag-Paar ähnlich dem Folgenden:

    <e type="VARCHAR"> </e>
    
    Copy

    Hier ist ein vollständiges Beispiel für die XML eines einfachen OBJECT-Werts, der zwei Schlüssel-Wert-Paare enthält:

    <SnowflakeData type="OBJECT">
        <key1 type="VARCHAR">value1</key1>
        <key2 type="VARCHAR">value2</key2>
    </SnowflakeData>
    
    Copy

    Hier ist ein vollständiges Beispiel für die XML eines einfachen ARRAY-Werts, der zwei VARCHAR-Werte enthält:

    <SnowflakeData type="ARRAY">
        <e type="VARCHAR">v1</e>
        <e type="VARCHAR">v2</e>
    </SnowflakeData>
    
    Copy

Beispiele

In diesem Beispiel wird gezeigt, wie Sie die Funktion verwenden, wenn Sie XML-formatierte Daten durch den Aufruf von PARSE_XML in ein OBJECT geladen haben.

Erstellen Sie eine Tabelle und Daten:

CREATE TABLE xml2 (x OBJECT);
INSERT INTO xml2 (x)
  SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');
Copy

Rufen Sie die Funktionen TO_XML() und TO_VARCHAR() auf:

SELECT x, TO_VARCHAR(x), TO_XML(x)
    FROM xml2;
+---------------------------+--------------------------------------+--------------------------------------+
| X                         | TO_VARCHAR(X)                        | TO_XML(X)                            |
|---------------------------+--------------------------------------+--------------------------------------|
| <note>                    | <note><body>Sample XML</body></note> | <note><body>Sample XML</body></note> |
|   <body>Sample XML</body> |                                      |                                      |
| </note>                   |                                      |                                      |
+---------------------------+--------------------------------------+--------------------------------------+
Copy

Sie können TO_XML() auch mit Daten aufrufen, die nicht von XML-formatierten Daten stammen, wie in den folgenden Beispielen gezeigt.

Im Folgenden wird ein einfaches OBJECT erstellt und dann die entsprechende XML generiert. Die XML-Ausgabe enthält Informationen zu den Datentypen der Werte in den Schlüssel-Wert-Paaren sowie zum Datentyp des Gesamtwerts (OBJECT):

CREATE TABLE xml_03 (object_col_1 OBJECT);
INSERT INTO xml_03 (object_col_1)
    SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');
Copy
SELECT object_col_1,
       TO_XML(object_col_1)
    FROM xml_03;
+---------------------+-------------------------------------------------------------------------------------------------------------------+
| OBJECT_COL_1        | TO_XML(OBJECT_COL_1)                                                                                              |
|---------------------+-------------------------------------------------------------------------------------------------------------------|
| {                   | <SnowflakeData type="OBJECT"><key1 type="VARCHAR">value1</key1><key2 type="VARCHAR">value2</key2></SnowflakeData> |
|   "key1": "value1", |                                                                                                                   |
|   "key2": "value2"  |                                                                                                                   |
| }                   |                                                                                                                   |
+---------------------+-------------------------------------------------------------------------------------------------------------------+
Copy

Im Folgenden wird ein einfaches ARRAY erstellt und dann die entsprechende XML generiert. Die XML-Ausgabe enthält Informationen zu den Datentypen der Array-Elemente sowie zum Datentyp des Gesamtwerts (ARRAY):

CREATE TABLE xml_04 (array_col_1 ARRAY);
INSERT INTO xml_04 (array_col_1)
    SELECT ARRAY_CONSTRUCT('v1', 'v2');
Copy
SELECT array_col_1,
       TO_XML(array_col_1)
    FROM xml_04;
+-------------+----------------------------------------------------------------------------------------------+
| ARRAY_COL_1 | TO_XML(ARRAY_COL_1)                                                                          |
|-------------+----------------------------------------------------------------------------------------------|
| [           | <SnowflakeData type="ARRAY"><e type="VARCHAR">v1</e><e type="VARCHAR">v2</e></SnowflakeData> |
|   "v1",     |                                                                                              |
|   "v2"      |                                                                                              |
| ]           |                                                                                              |
+-------------+----------------------------------------------------------------------------------------------+
Copy

Mit dem folgenden Code werden Daten im JSON-Format eingefügt und dann die entsprechende XML generiert:

CREATE TABLE xml_05 (json_col_1 VARIANT);
INSERT INTO xml_05 (json_col_1)
    SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');
Copy
SELECT json_col_1,
       TO_JSON(json_col_1),
       TO_XML(json_col_1)
    FROM xml_05;
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+
| JSON_COL_1  | TO_JSON(JSON_COL_1)  | TO_XML(JSON_COL_1)                                                                                                      |
|-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------|
| {           | {"key1":["a1","a2"]} | <SnowflakeData type="OBJECT"><key1 type="ARRAY"><e type="VARCHAR">a1</e><e type="VARCHAR">a2</e></key1></SnowflakeData> |
|   "key1": [ |                      |                                                                                                                         |
|     "a1",   |                      |                                                                                                                         |
|     "a2"    |                      |                                                                                                                         |
|   ]         |                      |                                                                                                                         |
| }           |                      |                                                                                                                         |
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+
Copy