Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

eval

eval テーブル関数は、引数をクエリ文字列として評価し、その文字列を単一の SELECT クエリとして実行します。

このテーブル関数は実験的機能であり、デフォルトでは無効になっています。使用するには、allow_experimental_eval_table_function 設定を有効にします。

SET allow_experimental_eval_table_function = 1;

これには、アナライザ (enable_analyzer。デフォルトで有効) が必要です。

構文

eval(expression)
eval(SELECT ...)

引数

  • expression — クエリ文字列を返す定数式です。クエリパラメータとスカラーサブクエリを使用できます。
  • SELECT ... — クエリ文字列を返す SELECT クエリです。この形式はスカラーサブクエリのシンタックスシュガーです。eval(SELECT ...)eval((SELECT ...)) と等価なため、このクエリは必ずちょうど1行1カラムを返す必要があります。

式の値は、次のいずれかの型である必要があります。

  • String
  • Nullable(String)
  • LowCardinality(String)
  • LowCardinality(Nullable(String))

値が NULL の場合、eval は例外をスローします。

戻り値

生成された SELECT クエリの結果をテーブルとして返します。

出力スキーマは eval テーブル関数の解析時に決定されるため、外側のクエリから、生成されたクエリの実際のカラム名や型を参照できます。

定数式を評価する例:

SELECT * FROM eval('SEL' || 'ECT 1 AS x');

結果:

┌─x─┐
│ 1 │
└───┘

クエリパラメータを使用する:

SET param_q = 'SELECT 2 AS y';
SELECT * FROM eval({q:String});

結果:

┌─y─┐
│ 2 │
└───┘

クエリテキストを返す SELECT クエリを評価します:

SELECT * FROM eval(SELECT 'SELECT 3 AS z');

結果:

┌─z─┐
│ 3 │
└───┘

生成したスキーマを外側のクエリで使用します:

SELECT x + 1 FROM eval('SELECT 4 AS x');

結果:

┌─plus(x, 1)─┐
│          5 │
└────────────┘

制約事項

  • eval はクエリ アナライザ (enable_analyzer = 1) でのみ動作します。
  • 生成されるクエリは、INTO OUTFILEFORMAT などの出力オプションを含まない、単一の SELECT クエリでなければなりません。eval で複数のステートメントは実行できません。
  • 生成されるクエリは自己完結している必要があります。独立したスコープで解決されるため、外側のクエリの WITH 別名やカラムは参照できません。
  • 生成されるクエリでは、eval テーブル関数を再度使用することはできません。
  • eval は、remote('host', eval(...)) のように、別のテーブル関数の引数として使用できません。生成されたクエリをリモートサーバーで実行するには、これを view でラップします: remote('host', view(SELECT * FROM eval(...)))
  • 引数はクエリの解析時に一度だけ評価され、行ごとやブロックごとに評価されるわけではありません。
  • 外側のクエリログには eval を含む元のクエリが記録されます。生成された SELECT クエリは、別個のユーザークエリとしては記録されません。
Navigation