Opérateurs d’expansion¶
Les opérateurs d’expansion développent une expression de requête qui représente une liste en valeurs individuelles dans la liste. Actuellement, l’opérateur d’étalement (**) est le seul opérateur d’expansion pris en charge par Snowflake.
Diffusion¶
L’opérateur de diffusion développe un tableau en une liste de valeurs individuelles. Cet opérateur est utile dans les cas d’utilisation suivants :
Requêtes contenant les clauses IN.
Appels à des fonctions définies par le système qui prennent une liste de valeurs comme arguments, telles que COALESCE, GREATEST et LEAST.
Fonctions SQL définies par l’utilisateur qui utilisent un argument pour fournir un tableau de valeurs.
Procédures stockées de Snowflake Scripting qui utilisent une variable de liaison pour fournir un tableau de valeurs. Pour plus d’informations sur l’utilisation des variables de liaison dans Snowflake Scripting, voir Utiliser une variable dans une instruction SQL (liaison) et Utilisation d’un argument dans une instruction SQL (liaison).
Pour plus d’informations sur ces cas d’utilisation, consultez l’article de blog Snowflake Introduces SQL Spread Operator (**) (Snowflake présente l’opérateur de diffusion).
Syntaxe¶
Limitations¶
L’entrée doit être un tableau de valeurs constantes, qui peut être un tableau de valeurs littérales ou une variable de liaison qui représente un tableau de valeurs littérales.
Chaque valeur d’un tableau semi-structuré est de type VARIANT. Une valeur VARIANT peut contenir une valeur de tout autre type de données. L’opérateur d’étalement prend en charge les types de données suivants pour la valeur stockée dans VARIANT :
Numérique (par exemple, INTEGER et NUMERIC)
Chaîne & binaire (par exemple, VARCHAR et BINARY)
Logique (par exemple, BOOLEAN)
Date & heure (par exemple, DATE, TIME et TIMESTAMP)
Les fonctions définies par l’utilisateur et les procédures stockées écrites dans des langues autres que SQL ne peuvent pas utiliser l’opérateur de diffusion.
L’expansion de très grands tableaux à l’aide de l’opérateur de diffusion peut nuire aux performances.
Exemples¶
Certains exemples utilisent les données du tableau suivant :
Créer une table et insérer des données :
Les exemples suivants utilisent l’opérateur de diffusion.
Développer un tableau de valeurs littérales dans une clause IN
Développer un tableau de valeurs littérales dans un appel de fonction défini par le système
Développer un tableau de valeurs littérales dans une clause IN¶
Développez un tableau de nombres à l’aide de l’opérateur de diffusion dans une requête sur la table spread_demo créée précédemment :
Expansion d’un tableau de chaînes à l’aide de l’opérateur de diffusion :
Utilisez une clause IN dans une requête contenant à la fois des valeurs INTEGER et des valeurs de tableaux étendus :
Développer un tableau de valeurs littérales dans un appel de fonction défini par le système¶
Développez un tableau de chaînes dans un appel à la fonction COALESCE :
Développez un tableau de nombres dans un appel à la fonction GREATEST :
Utiliser l’opérateur de diffusion avec une variable de liaison dans une fonction SQL définie par l’utilisateur¶
Créez une fonction SQL définie par l’utilisateur qui utilise l’opérateur de diffusion. La fonction prend un tableau comme argument et développe les valeurs du tableau pour interroger la table spread_demo créée précédemment :
Effectuez une requête dans la table à l’aide de la fonction :
Utiliser l’opérateur de diffusion avec une variable de liaison dans une procédure stockée de Snowflake Scripting¶
Créez une procédure stockée Snowflake Scripting qui utilise l’opérateur de diffusion. La procédure stockée prend un tableau comme argument et développe ensuite les valeurs du tableau dans une variable de liaison pour interroger la table spread_demo créée précédemment :
Appelez la procédure stockée :