> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# paramètres de session group_by_*

> Paramètres de session ClickHouse du groupe généré group_by_*.

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Fonctionnalité expérimentale
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Valeur par défaut", "Commentaire"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        Historique des versions
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Par défaut</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modifiable sans redémarrage
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Ces paramètres sont disponibles dans [system.settings](/fr/reference/system-tables/settings) et sont générés automatiquement à partir du [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="group_by_overflow_mode">
  ## group\_by\_overflow\_mode
</div>

<SettingsInfoBlock type="OverflowModeGroupBy" default_value="throw" />

Définit le comportement lorsque le nombre de clés uniques pour l’agrégation dépasse la limite :

* `throw` : lever une exception
* `break` : arrêter l’exécution de la requête et renvoyer un résultat partiel
* `any` : poursuivre l’agrégation pour les clés déjà présentes dans l’ensemble, sans y ajouter de nouvelles clés.

L’utilisation de la valeur 'any' permet d’exécuter une approximation de GROUP BY. La qualité de
cette approximation dépend de la nature statistique des données.

<div id="group_by_top_k_optimization_observation_rows">
  ## group\_by\_top\_k\_optimization\_observation\_rows
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="65536" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "65536"},{"label": "Nouveau paramètre expérimental : nombre de lignes que chaque flux d’agrégation observe avant de considérer qu’un tas top-K plein, n’ayant jamais rien rejeté, ne représente qu’une surcharge inutile, puis de le figer."}]}]} />

Pour `enable_group_by_top_k_optimization` : nombre de lignes que chaque flux d’agrégation observe avant de figer un tas top-K plein qui a ignoré moins de 10 % des lignes en entrée et évincé moins de clés que sa capacité. Un tas figé signifie que l’agrégation se poursuit comme si l’optimisation était désactivée.

La fenêtre effective est au moins égale à deux fois la taille réservée du tas, afin qu’il ait toujours la possibilité de se remplir avant d’être évalué. `0` désactive ce gel (le tas est néanmoins figé lorsqu’un ensemble d’égalités à la limite devient trop grand).

Cela n’a aucun effet sur les requêtes `GROUP BY keys LIMIT K` sans `ORDER BY`, pour lesquelles le gel est toujours désactivé : le plan associé à cette forme contient un tri synthétisé qui n’est rentable que tant que le tas limite la taille de la table de hachage ; figer le tas produirait donc un plan plus lent que celui sans optimisation.

<div id="group_by_two_level_threshold">
  ## group\_by\_two\_level\_threshold
</div>

<SettingsInfoBlock type="UInt64" default_value="100000" />

Nombre de clés à partir duquel une agrégation à deux niveaux démarre. 0 - le seuil n'est pas défini.

<div id="group_by_two_level_threshold_bytes">
  ## group\_by\_two\_level\_threshold\_bytes
</div>

<SettingsInfoBlock type="UInt64" default_value="50000000" />

Taille en octets de l’état d’agrégation à partir de laquelle une agrégation à deux niveaux commence à être utilisée. 0 : le seuil n’est pas défini. L’agrégation à deux niveaux est utilisée lorsqu’au moins l’un des seuils est atteint.

<div id="group_by_use_nulls">
  ## group\_by\_use\_nulls
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Modifie la façon dont la [clause GROUP BY](/fr/reference/statements/select/group-by) traite les types des clés d’agrégation.
Lorsque les spécificateurs `ROLLUP`, `CUBE` ou `GROUPING SETS` sont utilisés, certaines clés d’agrégation peuvent ne pas servir à produire certaines lignes de résultat.
Les colonnes correspondant à ces clés sont renseignées soit avec la valeur par défaut, soit avec `NULL` dans les lignes correspondantes, selon ce paramètre.

Valeurs possibles :

* 0 — La valeur par défaut du type de clé d’agrégation est utilisée pour produire les valeurs manquantes.
* 1 — ClickHouse exécute `GROUP BY` conformément à la norme SQL. Les types des clés d’agrégation sont convertis en [Nullable](/fr/reference/data-types/nullable). Les colonnes correspondant à ces clés d’agrégation sont renseignées avec [NULL](/fr/reference/syntax#null) pour les lignes qui ne les utilisent pas.

Voir aussi :

* [clause GROUP BY](/fr/reference/statements/select/group-by)
