メインコンテンツへスキップ
FROM句は、データの読み取り元を指定します。 FROM句の機能を拡張するために、JOIN句や ARRAY JOIN句を使用することもできます。 サブクエリは、FROM句内で括弧で囲んで指定できる別の SELECT クエリです。 SQL 標準の VALUES 句もテーブル式として使用できます。
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
詳細は Values テーブル関数 を参照してください。 FROM には、カンマ区切りで複数のデータソースを指定でき、これはそれらに対して CROSS JOIN を実行するのと同等です。 FROM は、必要に応じて SELECT 句の前に置くこともできます。これは標準 SQL に対する ClickHouse 固有の拡張で、SELECT ステートメントを読みやすくします。例:
FROM table
SELECT *

FINAL 修飾子

FINAL を指定すると、ClickHouse は結果を返す前にデータを完全にマージします。これにより、対象のテーブルエンジンでマージ時に行われるすべてのデータ変換も実行されます。 これは、次のテーブルエンジンを使用するテーブルからデータを選択する場合に適用されます。
  • ReplacingMergeTree
  • SummingMergeTree
  • AggregatingMergeTree
  • CollapsingMergeTree
  • VersionedCollapsingMergeTree
FINAL を使用する SELECT クエリは並列で実行されます。max_final_threads 設定は、使用するスレッド数を制限します。

欠点

FINAL を使用するクエリは、FINAL を使用しない同様のクエリに比べて、実行速度がわずかに遅くなります。理由は次のとおりです。
  • クエリの実行中にデータがマージされるため。
  • FINAL を使用するクエリでは、クエリで指定したカラムに加えて、主キーカラムも読み取る場合があるため。
通常はマージ時に行われる処理を、クエリ実行時にメモリ上で行う必要があるため、FINAL には追加のコンピュートおよびメモリリソースが必要です。ただし、正確な結果を得るために FINAL の使用が必要になることがあります (データがまだ完全にマージされていない可能性があるためです) 。それでも、マージを強制するために OPTIMIZE を実行するよりは低コストです。 FINAL の代わりに、MergeTree エンジンのバックグラウンド処理がまだ完了していないことを前提にした別のクエリを使用し、集計 を適用して対応できる場合もあります (たとえば、重複を除外する場合など) 。必要な結果を得るためにクエリで FINAL を使用する必要があるなら、使用して問題ありませんが、追加の処理が必要になる点には注意してください。 FINAL は、セッションまたはユーザープロファイルを使用して、クエリ内のすべてのテーブルに対し FINAL 設定で自動的に適用できます。

使用例

FINAL キーワードの使用方法
SELECT x, y FROM mytable FINAL WHERE x > 1;
クエリレベル設定として FINAL を使用する
SELECT x, y FROM mytable WHERE x > 1 SETTINGS final = 1;
セッションレベルの設定として FINAL を使用する
SET final = 1;
SELECT x, y FROM mytable WHERE x > 1;

実装の詳細

FROM 句が省略されている場合、データは system.one テーブルから読み取られます。 system.one テーブルにはちょうど1行だけが含まれます (このテーブルは、他の DBMS にある DUAL テーブルと同じ役割を果たします) 。 クエリを実行するには、クエリに記載されているすべてのカラムが適切なテーブルから抽出されます。外側のクエリに不要なカラムは、サブクエリから除外されます。 クエリにカラムが1つも記載されていない場合 (たとえば SELECT count() FROM t) 、行数を計算するため、いずれにしても何らかのカラムがテーブルから抽出されます (最小のものが優先されます) 。
最終更新日 2026年6月10日