メインコンテンツまでスキップ
メインコンテンツまでスキップ

FROM句

FROM句は、データを読み取るソースを指定します:

JOINおよびARRAY JOIN句もFROM句の機能を拡張するために使用できます。

サブクエリは、FROM句内の括弧で指定できる別のSELECTクエリです。

FROMは、カンマで区切られた複数のデータソースを含むことができ、これはそれらに対してCROSS JOINを実行することと同等です。

FROMは、オプションでSELECT句の前に出現することができます。これは、SELECT文を読みやすくするためのClickHouse特有のSQL標準の拡張です。例:

FINAL修飾子

FINALが指定されると、ClickHouseは結果を返す前にデータを完全にマージします。これは、指定されたテーブルエンジンに対してマージ中に発生するすべてのデータ変換も行います。

これは、次のテーブルエンジンを使用してテーブルからデータを選択する際に適用されます:

  • ReplacingMergeTree
  • SummingMergeTree
  • AggregatingMergeTree
  • CollapsingMergeTree
  • VersionedCollapsingMergeTree

FINALを使用したSELECTクエリは並行して実行されます。max_final_threads設定は、使用されるスレッドの数を制限します。

欠点

FINALを使用するクエリは、FINALを使用しない類似のクエリよりもわずかに遅く実行されます。その理由は次の通りです:

  • データはクエリ実行中にマージされます。
  • FINALを使用したクエリは、クエリで指定されたカラムに加えて主キーのカラムを読み取る場合があります。

FINALは、通常はマージ時に発生する処理がクエリ時にメモリ内で発生するため、追加の計算およびメモリリソースを必要とします。ただし、データがまだ完全にマージされていないため、正確な結果を得るためにFINALを使用する必要がある場合があります。FINALを使用することは、強制的にマージを実行するためにOPTIMIZEを実行するよりもコストが低くなります。

FINALを使用する代わりに、MergeTreeエンジンのバックグラウンドプロセスがまだ発生していないと仮定した異なるクエリを使用し、重複を排除するために集約を適用することが時々可能です。必要な結果を得るためにクエリでFINALを使用する必要がある場合は、それを行うことができますが、追加の処理が必要であることを認識しておいてください。

FINALは、セッションまたはユーザープロファイルを使用してクエリ内のすべてのテーブルに自動的に適用できます。FINAL設定を使用します。

使用例

FINALキーワードを使用する

クエリレベルの設定としてFINALを使用する

セッションレベルの設定としてFINALを使用する

実装の詳細

FROM句が省略された場合、データはsystem.oneテーブルから読み取られます。 system.oneテーブルには、正確に1行が含まれています(このテーブルは他のDBMSに存在するDUALテーブルと同じ目的を果たします)。

クエリを実行するには、クエリでリストされたすべてのカラムが適切なテーブルから抽出されます。外部クエリに必要ないカラムはサブクエリから破棄されます。 クエリがカラムをリストしない場合(例えば、SELECT count() FROM t)、行数を計算するためにいくつかのカラムがテーブルから抽出されます(最小のものが優先されます)。