- 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 Werts enthält. Wenn der Eingabewert NULL ist, ist auch das Ergebnis NULL.
Syntax¶
TO_XML( <expression> )
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>
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>
Bei einem ARRAY ist jedes Element des Arrays in einem Tag-Paar ähnlich dem Folgenden:
<e type="VARCHAR"> </e>
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>
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>
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 fügen Sie Daten ein:
CREATE OR REPLACE TABLE xml_02 (x OBJECT);
INSERT INTO xml_02 (x)
SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');
Rufen Sie die TO_XML- und TO_VARCHAR-Funktionen auf:
SELECT x, TO_VARCHAR(x), TO_XML(x) FROM xml_02;
+---------------------------+--------------------------------------+--------------------------------------+
| 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> | | |
+---------------------------+--------------------------------------+--------------------------------------+
Sie können die Funktion TO_XML auch mit Daten aufrufen, die nicht von XML-formatierten Daten stammen, wie in den folgenden Beispielen gezeigt.
Im folgenden Beispiel 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 OR REPLACE TABLE xml_03 (object_col_1 OBJECT);
INSERT INTO xml_03 (object_col_1)
SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');
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" | |
| } | |
+---------------------+-------------------------------------------------------------------------------------------------------------------+
Im folgenden Beispiel 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 OR REPLACE TABLE xml_04 (array_col_1 ARRAY);
INSERT INTO xml_04 (array_col_1)
SELECT ARRAY_CONSTRUCT('v1', 'v2');
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" | |
| ] | |
+-------------+----------------------------------------------------------------------------------------------+
Mit dem folgenden Beispiel werden Daten im JSON-Format eingefügt und dann die entsprechende XML generiert:
CREATE OR REPLACE TABLE xml_05 (json_col_1 VARIANT);
INSERT INTO xml_05 (json_col_1)
SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');
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" | | |
| ] | | |
| } | | |
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+