eval テーブル関数は、引数をクエリ文字列として評価し、その文字列を単一の SELECT クエリとして実行します。
このテーブル関数は実験的機能であり、デフォルトでは無効になっています。使用するには、allow_experimental_eval_table_function 設定を有効にします。
enable_analyzer。デフォルトで有効) が必要です。
構文
引数
expression— クエリ文字列を返す定数式です。クエリパラメータとスカラーサブクエリを使用できます。SELECT ...— クエリ文字列を返すSELECTクエリです。この形式はスカラーサブクエリのシンタックスシュガーです。eval(SELECT ...)はeval((SELECT ...))と等価なため、このクエリは必ずちょうど1行1カラムを返す必要があります。
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
NULL の場合、eval は例外をスローします。
戻り値
SELECT クエリの結果をテーブルとして返します。
出力スキーマは eval テーブル関数の解析時に決定されるため、外側のクエリから、生成されたクエリの実際のカラム名や型を参照できます。
例
SELECT クエリを評価します:
制約事項
evalはクエリ アナライザ (enable_analyzer = 1) でのみ動作します。- 生成されるクエリは、
INTO OUTFILEやFORMATなどの出力オプションを含まない、単一のSELECTクエリでなければなりません。evalで複数のステートメントは実行できません。 - 生成されるクエリは自己完結している必要があります。独立したスコープで解決されるため、外側のクエリの
WITH別名やカラムは参照できません。 - 生成されるクエリでは、
evalテーブル関数を再度使用することはできません。 evalは、remote('host', eval(...))のように、別のテーブル関数の引数として使用できません。生成されたクエリをリモートサーバーで実行するには、これをviewでラップします:remote('host', view(SELECT * FROM eval(...)))。- 引数はクエリの解析時に一度だけ評価され、行ごとやブロックごとに評価されるわけではありません。
- 外側のクエリログには
evalを含む元のクエリが記録されます。生成されたSELECTクエリは、別個のユーザークエリとしては記録されません。
viewテーブル関数allow_experimental_eval_table_function設定