La fonction de table eval évalue son argument en chaîne de requête, puis exécute cette chaîne comme une seule requête SELECT.
Cette fonction de table est expérimentale et désactivée par défaut. Activez-la avec le paramètre allow_experimental_eval_table_function :
SET allow_experimental_eval_table_function = 1;Cela nécessite également l’analyseur (enable_analyzer, activé par défaut).
Syntaxe
eval(expression)
eval(SELECT ...)Arguments
expression— Une expression constante qui renvoie une chaîne de requête. Les paramètres de requête et les sous-requêtes scalaires sont autorisés.SELECT ...— Une requêteSELECTqui renvoie une chaîne de requête. Cette forme est un raccourci syntaxique pour une sous-requête scalaire :eval(SELECT ...)est équivalent àeval((SELECT ...)). La requête doit donc renvoyer exactement une ligne et une colonne.
La valeur de l'expression doit être de l'un des types suivants :
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
Si la valeur est NULL, eval lève une exception.
Valeur renvoyée
Renvoie le résultat de la requête SELECT générée sous forme de table.
Le schéma de sortie est déterminé lors de l’analyse de la fonction de table eval, de sorte que les requêtes externes peuvent faire référence aux noms et aux types réels des colonnes de la requête générée.
Exemples
Évaluez une expression constante :
SELECT * FROM eval('SEL' || 'ECT 1 AS x');Résultat :
┌─x─┐
│ 1 │
└───┘Utilisez un paramètre de requête :
SET param_q = 'SELECT 2 AS y';
SELECT * FROM eval({q:String});Résultat :
┌─y─┐
│ 2 │
└───┘Évalue une requête SELECT en entrée et renvoie le texte de la requête :
SELECT * FROM eval(SELECT 'SELECT 3 AS z');Résultat :
┌─z─┐
│ 3 │
└───┘Utilisez le schéma généré dans la requête externe :
SELECT x + 1 FROM eval('SELECT 4 AS x');Résultat :
┌─plus(x, 1)─┐
│ 5 │
└────────────┘Restrictions
evalfonctionne uniquement avec l’analyseur de requêtes (enable_analyzer = 1).- La requête générée doit être une unique requête
SELECT, sans options de sortie telles queINTO OUTFILEouFORMAT.evaln’exécute pas plusieurs instructions. - La requête générée doit être autonome : elle est résolue dans sa propre portée et ne peut pas référencer les alias
WITHni les colonnes de la requête externe. - La requête générée ne peut pas réutiliser la fonction de table
eval. evalne peut pas être utilisé comme argument d’une autre fonction de table, telle queremote('host', eval(...)). Pour exécuter la requête générée sur un serveur distant, encapsulez-la dansview:remote('host', view(SELECT * FROM eval(...))).- L’argument est évalué une seule fois lors de l’analyse de la requête, et non une fois par ligne ou par bloc.
- Le journal des requêtes de la requête externe enregistre la requête d’origine qui contient
eval; la requêteSELECTgénérée n’est pas enregistrée comme une requête utilisateur distincte.
- fonction de table
view - paramètre
allow_experimental_eval_table_function