Operadores de expansão¶
Os operadores de expansão expandem uma expressão de consulta que representa uma lista para os valores individuais da lista. Atualmente, o operador de expansão (**) é o único operador de expansão suportado pelo Snowflake.
Expansão¶
O operador de expansão expande uma matriz em uma lista de valores individuais. Esse operador é útil para os seguintes casos de uso:
Consultas contendo as cláusulas IN.
Chamadas a funções definidas pelo sistema que recebem uma lista de valores como argumentos, como COALESCE, GREATEST e LEAST.
Funções SQL funções definidas pelo usuário que usam um argumento para fornecer uma matriz de valores.
Os procedimentos armazenados do Snowflake Scripting que usam uma variável de vinculação para fornecer uma matriz de valores. Para obter mais informações sobre o uso de variáveis de vinculação no Snowflake Scripting, consulte Como usar uma variável em uma instrução SQL (vinculação) e Uso de um argumento em uma instrução SQL (vinculação).
Para obter mais informações sobre esses casos de uso, consulte a postagem do blog Snowflake Introduces SQL Spread Operator (**).
Sintaxe¶
Limitações¶
A entrada deve ser uma matriz de valores constantes, que pode ser uma matriz de valores literais ou uma variável de vinculação que represente uma matriz de valores literais.
Cada valor em uma matriz semiestruturada é do tipo VARIANT. Um valor VARIANT pode conter um valor de qualquer outro tipo de dados. O operador de expansão é compatível com os seguintes tipos de dados para o valor armazenado no valor VARIANT:
Numérico (por exemplo, INTEGER e NUMERIC)
Cadeias de caracteres e binários (por exemplo, VARCHAR e BINARY)
Lógico (por exemplo, BOOLEAN)
Data e hora (por exemplo, DATE, TIME e TIMESTAMP)
As funções definidas pelo usuário e os procedimentos armazenados escritos em linguagens diferentes de SQL não podem usar o operador de expansão.
A expansão de matrizes muito grandes com o operador de propagação pode prejudicar o desempenho.
Exemplos¶
Alguns dos exemplos usam os dados da tabela a seguir:
Criar uma tabela e inserir dados:
Os exemplos a seguir usam o operador de expansão.
Expansão de uma matriz de valores literais em uma cláusula IN
Expansão de uma matriz de valores literais em uma chamada de função definida pelo sistema
Uso do operador de expansão com uma variável de vinculação em uma função definida pelo usuário SQL
Expansão de uma matriz de valores literais em uma cláusula IN¶
Expanda uma matriz de números usando o operador de expansão em uma consulta na tabela spread_demo criada anteriormente:
Expanda uma matriz de cadeias de caracteres usando o operador de expansão:
Use uma cláusula IN em uma consulta com uma combinação de valores INTEGER e valores de matriz expandida:
Expansão de uma matriz de valores literais em uma chamada de função definida pelo sistema¶
Expanda uma matriz de cadeias de caracteres em uma chamada para a função COALESCE:
Expanda uma matriz de números em uma chamada para a função GREATEST:
Uso do operador de expansão com uma variável de vinculação em uma função definida pelo usuário SQL¶
Crie uma função definida pelo usuário SQL que use o operador de expansão. A função recebe uma matriz como argumento e, em seguida, expande os valores da matriz para consultar a tabela spread_demo criada anteriormente:
Consultar a tabela usando a função:
Use o operador de expansão com uma variável de vinculação em um procedimento armazenado do Snowflake Scripting¶
Crie um procedimento armazenado do Snowflake Scripting que use o operador de expansão. O procedimento armazenado recebe uma matriz como argumento e, em seguida, expande os valores da matriz em uma variável de vinculação para consultar a tabela spread_demo criada anteriormente:
Chame o procedimento armazenado: