count
行または非NULL値の数をカウントします。
ClickHouseはcount
のために以下の構文をサポートしています:
count(expr)
またはCOUNT(DISTINCT expr)
。count()
またはCOUNT(*)
。count()
構文はClickHouse特有のものです。
引数
関数は次のものを受け取ることができます:
- パラメータなし。
- 一つの expression。
返される値
- パラメータなしで関数が呼び出された場合、行の数をカウントします。
- expressionが渡された場合、この式が非NULLを返した回数をカウントします。式がNullable-タイプの値を返す場合、
count
の結果は非Nullable
のままです。すべての行で式がNULL
を返した場合、関数は0を返します。
両方の場合において、返される値の型はUInt64です。
詳細
ClickHouseはCOUNT(DISTINCT ...)
構文をサポートしています。この構文の動作は count_distinct_implementation設定によって異なります。これは、操作を実行するために使用されるuniq*関数を定義します。デフォルトはuniqExact関数です。
SELECT count() FROM table
クエリは、デフォルトでMergeTreeからのメタデータを使用して最適化されます。行レベルのセキュリティを使用する必要がある場合は、optimize_trivial_count_query設定を使用して最適化を無効にしてください。
ただし、SELECT count(nullable_column) FROM table
クエリは、optimize_functions_to_subcolumns設定を有効にすることで最適化できます。optimize_functions_to_subcolumns = 1
を設定すると、関数は全カラムデータを読み込み処理するのではなく、nullサブカラムのみを読み取ります。クエリSELECT count(n) FROM table
はSELECT sum(NOT n.null) FROM table
に変換されます。
COUNT(DISTINCT expr)のパフォーマンス改善
COUNT(DISTINCT expr)
クエリが遅い場合は、並列化を改善するためにGROUP BY
句を追加することを検討してください。また、COUNT(DISTINCT target_col)
に使用されるターゲットカラムにインデックスを作成するためにプロジェクションを使用できます。
例
例 1:
例 2:
この例では、count(DISTINCT num)
がcount_distinct_implementation
設定値に従ってuniqExact
関数によって実行されることが示されています。