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

# configurações de sessão de group_by_*

> Configurações de sessão do ClickHouse no grupo gerado por 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>
            Recurso experimental
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versão", "Valor padrão", "Comentário"];
  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
  }}>
        Histórico de versões
      </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"
  }}>Padrão</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Pode ser alterado sem reiniciar
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

Essas configurações estão disponíveis em [system.settings](/pt-BR/reference/system-tables/settings) e são geradas automaticamente a partir da [fonte](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" />

Define o que acontece quando o número de chaves únicas para agregação excede o limite:

* `throw`: gera uma exceção
* `break`: interrompe a execução da consulta e retorna o resultado parcial
* `any`: continua a agregação para as chaves que entraram no conjunto, mas não adiciona novas chaves ao conjunto.

Usar o valor `any` permite executar uma aproximação de GROUP BY. A qualidade dessa
aproximação depende da natureza estatística dos dados.

<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": "Nova configuração experimental: número de linhas que cada fluxo de agregação observa antes de considerar um heap top-K cheio, que nunca rejeitou nada, pura sobrecarga e congelá-lo."}]}]} />

Para `enable_group_by_top_k_optimization`: o número de linhas que cada fluxo de agregação observa antes de congelar um heap top-K cheio que ignorou menos de 10% das linhas de entrada e removeu menos chaves do que sua capacidade. Um heap congelado significa que a agregação continua como se a otimização estivesse desabilitada.

A janela efetiva é de pelo menos o dobro do tamanho reservado do heap, para que ele sempre tenha a chance de ser preenchido antes de ser avaliado. `0` desabilita esse congelamento (o heap ainda é congelado quando um conjunto de empates na fronteira cresce além da sua capacidade).

Isso não tem efeito em consultas `GROUP BY keys LIMIT K` sem `ORDER BY`, nas quais o congelamento está sempre desabilitado: o plano desse formato contém uma ordenação gerada automaticamente que só compensa enquanto o heap limita a tabela hash; portanto, congelar o heap deixaria o plano mais lento do que o plano sem otimização.

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

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

Número de chaves a partir do qual uma agregação em dois níveis é iniciada. 0 - o limiar não está definido.

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

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

A partir de qual tamanho, em bytes, do estado de agregação, passa-se a usar a agregação em dois níveis. 0 - o limiar não está definido. A agregação em dois níveis é usada quando pelo menos um dos limiares é atingido.

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

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

Altera a forma como a [cláusula GROUP BY](/pt-BR/reference/statements/select/group-by) trata os tipos das chaves de agregação.
Quando os especificadores `ROLLUP`, `CUBE` ou `GROUPING SETS` são usados, algumas chaves de agregação podem não ser usadas na produção de determinadas linhas de resultado.
As colunas dessas chaves são preenchidas com o valor padrão ou com `NULL` nas linhas correspondentes, dependendo dessa configuração.

Valores possíveis:

* 0 — O valor padrão do tipo da chave de agregação é usado para preencher valores ausentes.
* 1 — O ClickHouse executa `GROUP BY` da mesma forma que o padrão SQL define. Os tipos das chaves de agregação são convertidos para [Nullable](/pt-BR/reference/data-types/nullable). As colunas das chaves de agregação correspondentes são preenchidas com [NULL](/pt-BR/reference/syntax#null) nas linhas em que elas não foram usadas.

Veja também:

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