> ## 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.

# ajustes de sesión de group_by_*

> Ajustes de sesión de ClickHouse del grupo generado 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>
            Funcionalidad experimental
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versión", "Valor predeterminado", "Comentario"];
  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
  }}>
        Historial de versiones
      </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
  }}>Tipo</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Predeterminado</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modificable sin reiniciar
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Estos ajustes están disponibles en [system.settings](/es/reference/system-tables/settings) y se generan automáticamente a partir del [código fuente](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" />

Establece qué sucede cuando el número de claves únicas para la agregación supera el límite:

* `throw`: lanzar una excepción
* `break`: dejar de ejecutar la consulta y devolver el resultado parcial
* `any`: continuar la agregación para las claves que entraron en el conjunto, pero sin añadir nuevas claves al conjunto.

Usar el valor 'any' permite ejecutar una aproximación de GROUP BY. La calidad de
esta aproximación depende de la naturaleza estadística de los datos.

<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": "Nueva configuración experimental: filas que cada flujo de agregación observa antes de considerar pura sobrecarga un heap top-K lleno que nunca rechazó nada y congelarlo."}]}]} />

Para `enable_group_by_top_k_optimization`: número de filas que cada flujo de agregación observa antes de congelar un heap top-K lleno que descartó menos del 10 % de las filas de entrada y expulsó menos claves que su capacidad. Un heap congelado implica que la agregación continúa como si la optimización estuviera deshabilitada.

La ventana efectiva es de al menos el doble del tamaño reservado del heap, por lo que un heap siempre tiene la oportunidad de llenarse antes de evaluarse. `0` deshabilita esta congelación (el heap se sigue congelando cuando un conjunto de empates en el límite crece demasiado).

Esto no afecta a las consultas `GROUP BY keys LIMIT K` sin `ORDER BY`, en las que la congelación siempre está deshabilitada: el plan para esta estructura contiene una ordenación generada automáticamente que solo compensa mientras el heap limita la tabla hash, por lo que congelarlo dejaría un plan más lento que el no optimizado.

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

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

A partir de cuántas claves comienza una agregación en dos niveles. 0: el umbral no se establece.

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

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

A partir de qué tamaño, en bytes, del estado de agregación se empieza a usar una agregación en dos niveles. 0: el umbral no está establecido. La agregación en dos niveles se usa cuando se activa al menos uno de los umbrales.

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

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

Cambia la forma en que la [cláusula GROUP BY](/es/reference/statements/select/group-by) trata los tipos de las claves de agregación.
Cuando se usan los especificadores `ROLLUP`, `CUBE` o `GROUPING SETS`, puede que algunas claves de agregación no se utilicen para generar determinadas filas de resultado.
Las columnas de estas claves se rellenan con el valor predeterminado o con `NULL` en las filas correspondientes, según esta configuración.

Valores posibles:

* 0 — Se usa el valor predeterminado del tipo de clave de agregación para generar los valores ausentes.
* 1 — ClickHouse ejecuta `GROUP BY` tal como lo define el estándar SQL. Los tipos de las claves de agregación se convierten en [Nullable](/es/reference/data-types/nullable). Las columnas de las claves de agregación correspondientes se rellenan con [NULL](/es/reference/syntax#null) en las filas en las que no se usaron.

Véase también:

* [cláusula GROUP BY](/es/reference/statements/select/group-by)
