Skip to main content
eval テーブル関数は、引数をクエリ文字列として評価し、その文字列を単一の SELECT クエリとして実行します。 このテーブル関数は実験的機能であり、デフォルトでは無効になっています。使用するには、allow_experimental_eval_table_function 設定を有効にします。
これには、アナライザ (enable_analyzer。デフォルトで有効) が必要です。

構文

引数

  • expression — クエリ文字列を返す定数式です。クエリパラメータとスカラーサブクエリを使用できます。
  • SELECT ... — クエリ文字列を返す SELECT クエリです。この形式はスカラーサブクエリのシンタックスシュガーです。eval(SELECT ...)eval((SELECT ...)) と等価なため、このクエリは必ずちょうど1行1カラムを返す必要があります。
式の値は、次のいずれかの型である必要があります。
  • String
  • Nullable(String)
  • LowCardinality(String)
  • LowCardinality(Nullable(String))
値が NULL の場合、eval は例外をスローします。

戻り値

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

定数式を評価する例:
結果:
クエリパラメータを使用する:
結果:
クエリテキストを返す SELECT クエリを評価します:
結果:
生成したスキーマを外側のクエリで使用します:
結果:

制約事項

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