Catégories :

Fonctions de données semi-structurées (analyse)

PARSE_XML

Interprète une chaîne d’entrée comme un document XML, produisant une valeur OBJECT. Si l’entrée est NULL, la sortie est NULL.

Notes sur l’utilisation

Chaque valeur élémentaire dans les documents XML est un texte ; cependant, cela n’est pas très utile pour traiter les données.

PARSE_XML tente de convertir des valeurs évidemment numériques et booléennes en représentation native de manière à ce que l’impression de ces valeurs donne des résultats textuellement identiques. Lors de l’analyse des nombres décimaux, PARSE_XML tente de préserver l’exactitude de la représentation en considérant 123,45 comme NUMBER(5,2) et non comme DOUBLE. Toutefois, les nombres en notation scientifique (c.-à-d. 1.2345e+02) ou ceux qui ne peuvent pas être stockés en tant que décimales à virgule fixe en raison de limitations de plage ou d’échelle sont stockés sous la forme DOUBLE. Comme XML ne représente pas des valeurs telles que TIMESTAMP, DATE, TIME ou BINARY de manière native, celles-ci doivent être représentées sous forme de chaînes.

Dans la version actuelle de Snowflake, PARSE_XML ne permet pas la reconnaissance automatique de ces valeurs ; elles sont traitées comme des chaînes (et la conversion explicite à partir des chaînes est requise).

Les attributs XML sont un ensemble non classé de paires nom/valeur. La fonction PARSE_XML ne préserve pas nécessairement l’ordre. Par exemple, la conversion de texte en XML et de nouveau en texte peut entraîner une chaîne qui contient les informations d’origine dans un ordre différent.

Vous pouvez également voir des changements dans les espaces entre les éléments lors de la conversion de chaîne en XML.

Exemples

CREATE TABLE xtab (v OBJECT);

INSERT INTO xtab SELECT PARSE_XML(column1) AS v
  FROM VALUES ('<a/>'), ('<a attr="123">text</a>'), ('<a><b>X</b><b>Y</b></a>');

SELECT * FROM xtab;

-------------------------+
           V             |
-------------------------+
 <a></a>                 |
 <a attr="123">text</a>  |
 <a><b>X</b><b>Y</b></a> |
-------------------------+