- Categorias:
XMLGET¶
Extrai um objeto de elemento XML (normalmente referido simplesmente como uma tag) do conteúdo do elemento externo XML com base no nome e número de instância da tag especificada.
(Note que uma tag XML não é o mesmo que uma tag de governança de dados do Snowflake.)
Se qualquer argumento de XMLGET for NULL, o resultado será NULL.
Se a instância da tag não for encontrada, o resultado será NULL.
Sintaxe¶
XMLGET( <expression> , <tag_name> [ , <instance_number> ] )
Argumentos¶
expression
A expressão a partir da qual se extrai o elemento.
A expressão deve avaliar como um OBJECT (ou um VARIANT contendo um OBJECT). O OBJECT deve conter XML válido no formato interno que o Snowflake suporta. Normalmente, isso significa que o OBJECT foi produzido por uma das seguintes opções:
Chamada da função PARSE_XML.
Carregamento dos dados (por exemplo, pelo comando COPY INTO <tabela>) e especificação que os dados estão no formato XML.
A função XMLGET não opera diretamente sobre uma expressão VARCHAR mesmo que esse VARCHAR contenha um texto XML válido.
tag_name
O nome de uma tag XML armazenada no
expression
.instance_number
Se o XML tiver múltiplas instâncias de
tag_name
, então useinstance_number
para especificar qual instância deve ser recuperada. Como um índice de matriz, oinstance_number
é baseado em 0, não baseado em 1.instance_number
pode ser omitido, caso em que é utilizado o valor padrão 0.
Retornos¶
O tipo de dados do valor retornado é OBJECT.
Consulte as Notas de Uso para obter mais detalhes.
Notas de uso¶
O resultado de XMLGET não é o conteúdo da tag (ou seja, o texto entre as tags), mas o elemento inteiro (a tag de abertura, conteúdo e tag de fechamento). O valor de retorno é um OBJECT. A partir deste OBJECT, você pode extrair o nome da tag, os valores dos atributos da tag e o conteúdo do elemento (incluindo tags aninhadas) usando a função GET:
Para extrair valores de atributos, use
GET(tag, '@attrname')
.Para extrair o conteúdo, use
GET(tag, '$')
.Para extrair o nome da tag, use
GET(tag, '@')
.
Você pode extrair tags aninhadas ao aninhar chamadas XMLGET(), por exemplo
select xmlget(xmlget(my_xml_column, 'my_tag'), 'my_inner_tag') ...;
As posições das tags internas no conteúdo podem ser obtidas usando
GET(tag, 'inner-tag-name')
; se o conteúdo contiver vários elementos, as posições serão representadas como uma matriz.Não se pode usar XMLGET para extrair o elemento mais externo. Para obter o elemento mais externo, basta selecionar o próprio
expression
.
Exemplos¶
O exemplo seguinte cria uma tabela com um OBJECT que contém XML, depois utiliza XMLGET() para extrair elementos desse OBJECT.
CREATE TABLE xml_demo (ID INTEGER, object_col OBJECT);
INSERT INTO xml_demo (id, object_col)
SELECT 1001,
PARSE_XML('<level1> 1 <level2> 2 <level3> 3A </level3> <level3> 3B </level3> </level2> </level1>');
SELECT object_col,
XMLGET(object_col, 'level2'),
XMLGET(XMLGET(object_col, 'level2'), 'level3', 1)
FROM xml_demo;
+-------------------------+------------------------------+---------------------------------------------------+
| OBJECT_COL | XMLGET(OBJECT_COL, 'LEVEL2') | XMLGET(XMLGET(OBJECT_COL, 'LEVEL2'), 'LEVEL3', 1) |
|-------------------------+------------------------------+---------------------------------------------------|
| <level1> | <level2> | <level3>3B</level3> |
| 1 | 2 | |
| <level2> | <level3>3A</level3> | |
| 2 | <level3>3B</level3> | |
| <level3>3A</level3> | </level2> | |
| <level3>3B</level3> | | |
| </level2> | | |
| </level1> | | |
+-------------------------+------------------------------+---------------------------------------------------+
Este exemplo mostra como usar GET() com XMLGET() para recuperar o conteúdo de um elemento. Neste exemplo, a tag level2
contém três itens (texto e duas tags aninhadas), portanto GET retorna estes itens em um ARRAY. As tags aninhadas são representadas por OBJECTs (pares chave-valor). A propriedade @
contém o nome da tag aninhada e a propriedade $
contém o conteúdo da tag aninhada.
SELECT object_col,
GET(XMLGET(object_col, 'level2'), '$')
FROM xml_demo;
+-------------------------+----------------------------------------+
| OBJECT_COL | GET(XMLGET(OBJECT_COL, 'LEVEL2'), '$') |
|-------------------------+----------------------------------------|
| <level1> | [ |
| 1 | 2, |
| <level2> | { |
| 2 | "$": "3A", |
| <level3>3A</level3> | "@": "level3" |
| <level3>3B</level3> | }, |
| </level2> | { |
| </level1> | "$": "3B", |
| | "@": "level3" |
| | } |
| | ] |
+-------------------------+----------------------------------------+
Este exemplo mostra como usar GET() com XMLGET() para recuperar um atributo de uma tag:
INSERT INTO xml_demo (id, object_col)
SELECT 1002,
PARSE_XML('<level1> 1 <level2 an_attribute="my attribute"> 2 </level2> </level1>');
SELECT object_col,
GET(XMLGET(object_col, 'level2'), '@an_attribute')
FROM xml_demo
WHERE ID = 1002;
+--------------------------------------------------+----------------------------------------------------+
| OBJECT_COL | GET(XMLGET(OBJECT_COL, 'LEVEL2'), '@AN_ATTRIBUTE') |
|--------------------------------------------------+----------------------------------------------------|
| <level1> | "my attribute" |
| 1 | |
| <level2 an_attribute="my attribute">2</level2> | |
| </level1> | |
+--------------------------------------------------+----------------------------------------------------+