SET VARIABLE
S’applique à : Databricks SQL Databricks Runtime 14.1 et versions ultérieures
Permet de modifier la valeur d’une ou de plusieurs variables temporaires.
Pour définir un paramètre de configuration, utilisez SET.
Syntaxe
SET { VAR | VARIABLE } { variable_name = { expression | DEFAULT } } [, ...]
SET { VAR | VARIABLE } ( variable_name [, ...] ) = ( query ) }
Paramètres
-
Spécifie le nom d’une variable temporaire.
Si la variable est introuvable, Azure Databricks génère une erreur UNRESOLVED_VARIABLE.
Si vous spécifiez des variables en double, Azure Databricks génère une erreur DUPLICATE_ASSIGNMENTS.
-
Toute expression bien formée qui calcule la nouvelle valeur de variable.
DEFAULT
Utilisé l’expression par défaut de la variable ou
NULL
si aucune n’a été spécifiée pour calculer la nouvelle valeur de variable.-
Toute requête bien formée avec les restrictions suivantes :
- La requête retourne au maximum une ligne (ROW_SUBQUERY_TOO_MANY_ROWS).
- Le nombre de colonnes retournées par la requête correspond au nombre de noms de variables spécifiés (ASSIGNMENT_ARITY_MISMATCH).
- Chaque colonne retournée peut être convertie en variable à la position correspondante (CAST_INVALID_INPUT).
Si la requête ne retourne aucune ligne, Azure Databricks définit toutes les variables spécifiées sur
NULL
.Vous pouvez utiliser le mot clé
DEFAULT
au lieu d’une expression de liste de sélection pour définir une variable sur sa valeur par défaut.
Exemples
> DECLARE VARIABLE myvar1 INT DEFAULT 7;
> DECLARE VARIABLE myvar2 STRING DEFAULT ‘hello’;
-- Set a SQL variable to a value
> SET VAR myvar1 = 5;
> VALUES (myvar1);
5
-- Set a SQL variable back to DEFAULT
> SET VARIABLE myvar1 = DEFAULT;
> VALUES (myvar1);
7
-- Set a SQL variable to the result of a scalar subquery.
> SET VARIABLE myvar1 = (SELECT max(c1) FROM VALUES(1), (2) AS T(c1));
> VALUES (myvar1);
2
-- Set multiple variables from a query
> SET VAR (myvar1, myvar2) = (VALUES(10, 'world'));
> VALUES (myvar1, myvar2);
10 world
-- Set multiple variables from expressions
> SET VAR myvar1 = 11, myvar2 = 'hello';
> VALUES (myvar1, myvar2);
11 hello
-- Set multiple variables based on a query
> SET VARIABLE (myvar1, myvar2)
= (SELECT max(c1), CAST(min(c1) AS STRING) FROM VALUES(1), (2) AS T(c1));
> VALUES (myvar1, myvar2);
2 1
-- Assign NULLs on empty query
> SET VAR (myvar1, myvar2)
= (SELECT max(c1), CAST(min(c1) AS STRING) FROM VALUES(1), (2) AS T(c1) HAVING max(c1) = 0);
> VALUES (myvar1, myvar2);
NULL NULL
-- Using a variable with an IDENTIFIER clause
> DECLARE colname STRING;
> SET VAR colname = 'c1';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
1
> SET VARIABLE colname = 'c2';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
2
-- Variable defaults are recomputed
> DECLARE VARIABLE val DEFAULT RAND();
> SELECT val;
0.1234...
> SET VARIABLE val = DEFAULT;
> SELECT val;
0.9876...