Catégories :

Fonctions de conversion , Fonctions de données semi-structurées et structurées (conversion)

TO_XML

Convertit un VARIANT en un VARCHAR qui contient une représentation XML de la valeur. Si l’entrée est NULL, le résultat est également NULL.

Syntaxe

TO_XML( <expression> )
Copy

Arguments

expression

Expression dont le résultat est un VARIANT ou qui peut être convertie en VARIANT.

Renvoie

Le type de données de la valeur renvoyée est VARCHAR.

Notes sur l’utilisation

  • Les utilisations courantes de cette fonction sont les suivantes :

    • Génération d’une chaîne contenant une valeur au format XML qui correspond à une valeur au format XML insérée à l’origine.

    • Conversion d’une valeur semi-structurée (qui ne doit pas nécessairement avoir été au format XML à l’origine) en une valeur au format XML. Par exemple, vous pouvez utiliser TO_XML pour générer une représentation compatible XML d’une valeur qui était initialement au format JSON.

  • Si l’entrée expression ne correspond pas à un VARIANT, Snowflake convertit implicitement le résultat de l’expression en un VARIANT. Puisque tous les autres types de données Snowflake peuvent être convertis en VARIANT, cela signifie qu’une valeur de n’importe quel type de données peut être transmise à TO_XML et convertie en une chaîne au format XML. (Le type de données GEOGRAPHY est une exception partielle ; pour appeler TO_XML avec une valeur de type GEOGRAPHY, vous devez explicitement convertir la valeur GEOGRAPHY en VARIANT).

  • Si la valeur n’est pas en XML à l’origine, Snowflake génère des balises compatibles XML. Ces balises peuvent utiliser l’attribut type pour spécifier le type de données Snowflake du contenu de la balise. Vous trouverez ci-dessous des exemples de balises générées par Snowflake.

    La paire de balises la plus externe est semblable à ce qui suit :

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

    Le type de données spécifié dans l’attribut type de la balise peut varier.

    Pour un OBJECT, chaque paire de balises clé-valeur est basée sur la clé. Par exemple :

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

    Pour un ARRAY, chaque élément du tableau est dans une paire de balises similaire à :

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

    Voici un exemple complet de XML pour un OBJECT simple qui contient deux paires clé-valeur :

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

    Voici un exemple complet de XML pour un ARRAY simple qui contient deux valeurs VARCHAR :

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

Exemples

Cet exemple montre comment utiliser la fonction si vous avez chargé des données au format XML dans un OBJECT en appelant PARSE_XML.

Créez une table et des données :

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

Appelez les fonctions TO_XML() et TO_VARCHAR() :

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

Vous pouvez également appeler TO_XML() avec des données qui ne proviennent pas de données au format XML, comme le montrent les exemples ci-dessous.

Ce qui suit crée un OBJECT simple et génère ensuite le XML correspondant. La sortie XML contient des informations sur les types de données des valeurs dans les paires clé-valeur, ainsi que sur le type de données de la valeur globale (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

Ce qui suit crée un ARRAY simple et génère ensuite le XML correspondant. La sortie XML contient des informations sur les types de données des éléments du tableau, ainsi que sur le type de données de la valeur globale (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

Le code suivant insère des données au format JSON et génère ensuite le XML correspondant :

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