SELECT クエリはデータを取得します。デフォルトでは、要求されたデータがクライアントに返されますが、INSERT INTO と組み合わせると、別のテーブルに転送することもできます。
構文
SELECT の直後にある必須の式のリストは例外で、これについては以下で詳しく説明します。
各オプション句の詳細は個別のセクションで扱っており、実行順に以下に示します。
- WITH 句
- SELECT 句
- DISTINCT 句
- FROM 句
- SAMPLE 句
- JOIN 句
- PREWHERE 句
- WHERE 句
- WINDOW 句
- GROUP BY 句
- LIMIT BY 句
- HAVING 句
- QUALIFY 句
- LIMIT 句
- OFFSET 句
- UNION 句
- INTERSECT 句
- EXCEPT 句
- INTO OUTFILE 句
- FORMAT 句
SELECT 句
SELECT 句で指定された式は、前述の各句でのすべての処理が完了した後に計算されます。これらの式は、結果の各行に個別に適用されるものとして扱われます。SELECT 句内の式に集約関数が含まれている場合、ClickHouse は GROUP BY による集約の際に、集約関数とその引数として使用される式を処理します。
結果にすべてのカラムを含めるには、アスタリスク (*) 記号を使用します。たとえば、SELECT * FROM ... です。
Dynamic カラムの選択
a を含むすべてのカラムのデータを選択します。
COLUMNS 式を使用し、それらに関数を適用できます。
たとえば:
COLUMNS 式 が返すすべてのカラムは、個別の引数として関数に渡されます。また、関数が対応していれば、ほかの引数を渡すこともできます。関数を使用する際は注意してください。渡した引数の数に関数が対応していない場合、ClickHouse は例外をスローします。
例えば:
COLUMNS('a') は 2 つのカラム aa と ab を返します。COLUMNS('c') は bc カラムを返します。+ 演算子は 3 つの引数には適用できないため、ClickHouse は соответствするメッセージとともに例外をスローします。
COLUMNS 式に一致したカラムは、データ型が異なる場合があります。COLUMNS がどのカラムにも一致せず、かつ SELECT 内の唯一の式である場合、ClickHouse は例外をスローします。
アスタリスク
MATERIALIZED カラムと ALIAS カラムを除く) に展開されます。アスタリスクの使用が妥当なのは、次のような限られたケースだけです。
- テーブルのダンプを作成するとき。
- システムテーブルのように、カラム数がごく少ないテーブルの場合。
- テーブルにどのようなカラムがあるかを確認するとき。この場合は
LIMIT 1を設定します。ただし、DESC TABLEクエリを使う方が適切です。 PREWHEREを使って少数のカラムに対して強い絞り込みを行うとき。- サブクエリ内 (外側のクエリで不要なカラムはサブクエリから除外されるため) 。
極値
XML、JSON*、TabSeparated*、CSV*、Vertical、Template、Pretty* フォーマット で出力されます。その他のフォーマットでは出力されません。
JSON* および XML フォーマットでは、極値は別個の extremes フィールドに出力されます。TabSeparated*、CSV*、Vertical フォーマットでは、その行はメインの結果の後に出力され、totals がある場合はその後に続きます。その前には空行が 1 行挿入されます (他のデータの後) 。Pretty* フォーマットでは、その行はメインの結果の後に、totals がある場合はその後に、別のテーブルとして出力されます。Template フォーマットでは、極値は指定したテンプレートに従って出力されます。
極値は LIMIT の前、ただし LIMIT BY の後の行に対して計算されます。ただし、LIMIT offset, size を使用する場合は、offset より前の行も extremes に含まれます。ストリームリクエストでは、結果に LIMIT を通過した少数の行が含まれることもあります。
注記
AS 別名) を使用できます。
GROUP BY、ORDER BY、LIMIT BY 句では、位置引数を使用できます。これを有効にするには、enable_positional_arguments 設定をオンにします。すると、たとえば ORDER BY 1,2 は、テーブルの行を最初のカラム、次に 2 番目のカラムでソートします。
実装の詳細
DISTINCT、GROUP BY、ORDER BY 句、および IN と JOIN のサブクエリを省略すると、クエリ全体がストリーム処理され、RAM 使用量は O(1) に抑えられます。それ以外の場合は、適切な制限を設定しないと、大量の RAM を消費する可能性があります。
max_memory_usagemax_rows_to_group_bymax_rows_to_sortmax_rows_in_distinctmax_bytes_in_distinctmax_rows_in_setmax_bytes_in_setmax_rows_in_joinmax_bytes_in_joinmax_bytes_before_external_sortmax_bytes_ratio_before_external_sortmax_bytes_before_external_group_bymax_bytes_ratio_before_external_group_by
SELECT 修飾子
SELECT クエリでは、次の修飾子を使用できます。
修飾子の組み合わせ
SELECT クエリでの SETTINGS
SELECT クエリ内で直接指定できます。設定値はこのクエリに対してのみ適用され、クエリの実行後に既定値または以前の値に戻ります。
設定を行うその他の方法については、こちらを参照してください。
ブール型の設定が true の場合は、値の代入を省略した短縮構文を使用できます。設定名だけを指定すると、自動的に 1 (true) に設定されます。
例