group_by_overflow_mode
集約に使用する一意なキーの数が上限を超えた場合の動作を設定します。throw: 例外を送出するbreak: クエリの実行を停止し、途中までの結果を返すany: set に含まれているキーについては集約を続行しますが、新しいキーは set に追加しません。
any を使用すると、GROUP BY の近似結果を得られます。この近似の精度は、
データの統計的な性質に依存します。
group_by_top_k_optimization_observation_rows
enable_group_by_top_k_optimization の場合、各集約ストリームが、入力行の 10% 未満しかスキップせず、容量より少ないキーしか追い出さなかった完全な top-K ヒープを固定するまでに観測する行数です。ヒープが固定されると、最適化が無効であるかのように集約が続行されます。
実効ウィンドウはヒープの予約済みサイズの少なくとも 2 倍です。そのため、ヒープは評価される前に必ず満杯になる機会があります。0 はこの固定を無効にします (ただし、境界の同順位セットがヒープの容量を超えた場合、ヒープは引き続き固定されます) 。
これは、ORDER BY のない GROUP BY keys LIMIT K クエリには影響しません。この形式では固定は常に無効です。この形式のプランには、ヒープがハッシュテーブルを制限している間にのみ効果を発揮する合成ソートが含まれるためです。ヒープを固定すると、最適化なしの場合よりも遅いプランになってしまいます。
group_by_top_k_optimization_shared_boundary
enable_group_by_top_k_optimization 向けの設定で、最も厳しいスキップ境界を集約スレッド間で共有します。各スレッドは、自身の top-K Set の境界が厳しくなった場合に、処理したブロックごとに 1 回その境界をパブリッシュします。各スレッドは自身の境界だけでなく、パブリッシュされた中で最良の境界を使って行をスキップします。ある行よりも厳密に優れた K 個のキーのSetが存在すれば、それらのキーをどのスレッドが保持しているかにかかわらず、その行が最終結果に含まれないことは確定します。そのため、境界を共有しても結果は変わりません。この設定の効果は、ローカルのキーの順位が低いスレッド (例: キーの値がテーブル内で偏って分布している場合) が、本来なら無駄に集約していた行をスキップできるようになることだけです。
設定可能な値:
- 0 — 無効。
- 1 — 有効。
group_by_two_level_threshold
この数以上のキーになると、二段階集約が開始されます。0 の場合、しきい値は設定されません。group_by_two_level_threshold_bytes
集約状態のサイズが何バイト以上になると二段階集約を使用し始めるかを指定します。0 の場合、しきい値は設定されません。いずれか 1 つのしきい値がトリガーされると、二段階集約が使用されます。group_by_use_nulls
GROUP BY 句で集約キーの型をどのように扱うかを変更します。ROLLUP、CUBE、または GROUPING SETS 指定子を使用すると、一部の結果行の生成時に使われない集約キーが生じることがあります。
この設定に応じて、これらのキーに対応するカラムは、該当する行でデフォルト値または NULL で埋められます。
設定可能な値:
- 0 — 欠損値の生成には、集約キー型のデフォルト値が使用されます。
- 1 — ClickHouse は SQL 標準に従って
GROUP BYを実行します。集約キーの型は Nullable に変換されます。対応する集約キーのカラムは、そのキーが使われなかった行では NULL で埋められます。