- 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> )
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 Daten:
CREATE TABLE xml2 (x OBJECT); INSERT INTO xml2 (x) SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');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> | | | +---------------------------+--------------------------------------+--------------------------------------+
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');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 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');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 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"] } ');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" | | | | ] | | | | } | | | +-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+