FROM句は、データの読み取り元を指定します。
FROM句の機能を拡張するために、JOIN句や ARRAY JOIN句を使用することもできます。
サブクエリは、FROM句内で括弧で囲んで指定できる別の SELECT クエリです。
SQL 標準の VALUES 句もテーブル式として使用できます。
FROM には、カンマ区切りで複数のデータソースを指定でき、これはそれらに対して CROSS JOIN を実行するのと同等です。
FROM は、必要に応じて SELECT 句の前に置くこともできます。これは標準 SQL に対する ClickHouse 固有の拡張で、SELECT ステートメントを読みやすくします。例:
FINAL 修飾子
FINAL を指定すると、ClickHouse は結果を返す前にデータを完全にマージします。これにより、対象のテーブルエンジンでマージ時に行われるすべてのデータ変換も実行されます。
これは、次のテーブルエンジンを使用するテーブルからデータを選択する場合に適用されます。
ReplacingMergeTreeSummingMergeTreeAggregatingMergeTreeCollapsingMergeTreeVersionedCollapsingMergeTree
FINAL を使用する SELECT クエリは並列で実行されます。max_final_threads 設定は、使用するスレッド数を制限します。
欠点
FINAL を使用するクエリは、FINAL を使用しない同様のクエリに比べて、実行速度がわずかに遅くなります。理由は次のとおりです。
- クエリの実行中にデータがマージされるため。
FINALを使用するクエリでは、クエリで指定したカラムに加えて、主キーカラムも読み取る場合があるため。
FINAL には追加のコンピュートおよびメモリリソースが必要です。ただし、正確な結果を得るために FINAL の使用が必要になることがあります (データがまだ完全にマージされていない可能性があるためです) 。それでも、マージを強制するために OPTIMIZE を実行するよりは低コストです。
FINAL の代わりに、MergeTree エンジンのバックグラウンド処理がまだ完了していないことを前提にした別のクエリを使用し、集計 を適用して対応できる場合もあります (たとえば、重複を除外する場合など) 。必要な結果を得るためにクエリで FINAL を使用する必要があるなら、使用して問題ありませんが、追加の処理が必要になる点には注意してください。
FINAL は、セッションまたはユーザープロファイルを使用して、クエリ内のすべてのテーブルに対し FINAL 設定で自動的に適用できます。
使用例
FINAL キーワードの使用方法
FINAL を使用する
FINAL を使用する
実装の詳細
FROM 句が省略されている場合、データは system.one テーブルから読み取られます。
system.one テーブルにはちょうど1行だけが含まれます (このテーブルは、他の DBMS にある DUAL テーブルと同じ役割を果たします) 。
クエリを実行するには、クエリに記載されているすべてのカラムが適切なテーブルから抽出されます。外側のクエリに不要なカラムは、サブクエリから除外されます。
クエリにカラムが1つも記載されていない場合 (たとえば SELECT count() FROM t) 、行数を計算するため、いずれにしても何らかのカラムがテーブルから抽出されます (最小のものが優先されます) 。