Categorias:

Funções de conversão , Funções de dados semiestruturados e estruturados (Conversão)

TO_XML

Converte um VARIANT em um VARCHAR que contém uma representação XML do valor. Se a entrada for NULL, o resultado também será NULL.

Sintaxe

TO_XML( <expression> )
Copy

Argumentos

expression

Uma expressão que avalia como um VARIANT ou que pode ser convertida em um VARIANT.

Retornos

O tipo de dados do valor retornado é VARCHAR.

Notas de uso

  • Os usos comuns para esta função incluem:

    • Geração de uma cadeia de caracteres que contém um valor formatado XML que corresponde a um valor formatado XML originalmente inserido.

    • Conversão de um valor semiestruturado (que não precisa necessariamente ter sido formatado como XML originalmente) em um valor formatado XML. Por exemplo, você pode usar TO_XML para gerar uma representação compatível XML de um valor que foi originalmente formatado como JSON.

  • Se a entrada expression não avaliar como um VARIANT, o Snowflake implicitamente converterá o resultado da expressão em um VARIANT. Como todos os outros tipos de dados do Snowflake podem ser convertidos em VARIANT, isso significa que um valor de qualquer tipo de dados pode ser passado para TO_XML e convertido em uma cadeia de caracteres formatada como XML. (O tipo de dados GEOGRAPHY é uma exceção parcial; para chamar TO_XML com um valor do tipo GEOGRAPHY, você precisa converter explicitamente o valor GEOGRAPHY em VARIANT.)

  • Se o valor não se originou como XML, então o Snowflake gerará tags compatíveis com XML. Estas tags podem usar o atributo type para especificar o tipo de dados Snowflake do conteúdo da tag. Abaixo estão exemplos de tags geradas pelo Snowflake.

    O par de tags mais externo é semelhante ao seguinte:

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

    O tipo de dados especificado no atributo type da tag pode variar.

    Para um OBJECT, as tags de cada par chave-valor são baseadas na chave. Por exemplo:

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

    Para um ARRAY, cada elemento da matriz está em um par de tag semelhante a:

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

    Aqui está um exemplo completo do XML para um simples OBJECT que contém dois pares chave-valor:

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

    Aqui está um exemplo completo do XML para um simples ARRAY que contém dois valores VARCHAR:

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

Exemplos

Este exemplo mostra como usar a função se você tiver carregado dados em formato XML em um OBJECT chamando PARSE_XML.

Criar uma tabela e dados:

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

Chamar as funções TO_XML() e 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

Você também pode chamar TO_XML() com dados que não se originaram como dados formatados como XML, como mostrado nos exemplos abaixo.

O seguinte cria um OBJECT simples e depois gera o XML correspondente. A saída XML contém informações sobre os tipos de dados dos valores nos pares chave-valor, assim como o tipo de dados do valor total (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

O seguinte cria um ARRAY simples e depois gera o XML correspondente. A saída XML contém informações sobre os tipos de dados dos elementos da matriz, assim como o tipo de dados do valor total (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

O seguinte código insere dados que estão no formato JSON e depois gera o XML correspondente:

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