> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# configurações de sessão join_*

> Configurações de sessão do ClickHouse no grupo gerado de join_*.

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](/docs/pt-BR/reference/system-tables/settings) e são geradas automaticamente com base no [código-fonte](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="join_algorithm">
  ## join\_algorithm
</div>

<SettingsInfoBlock type="JoinAlgorithm" default_value="direct,parallel_hash,hash" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "direct,parallel_hash,hash"},{"label": "'default' foi descontinuado em favor de algoritmos de junção especificados explicitamente; além disso, agora parallel_hash é preferido em vez de hash"}]}]} />

Especifica qual algoritmo de [JOIN](/docs/pt-BR/reference/statements/select/join) é usado.

Vários algoritmos podem ser especificados, e um deles será escolhido para uma consulta específica com base em kind/strictness e no motor de tabela.

Valores possíveis:

* grace\_hash

[Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join) é usado. O Grace hash oferece uma opção de algoritmo que permite executar junções complexas com bom desempenho, limitando o uso de memória.

A primeira fase de uma grace join lê a tabela da direita e a divide em N buckets, dependendo do valor de hash das colunas-chave (inicialmente, N é `grace_hash_join_initial_buckets`). Isso é feito de forma a garantir que cada bucket possa ser processado de maneira independente. As linhas do primeiro bucket são adicionadas a uma tabela hash em memória, enquanto as demais são salvas em disco. Se a tabela hash crescer além do limite de memória (por exemplo, conforme definido por [`max_bytes_in_join`](/docs/pt-BR/reference/settings/session-settings/max-bytes#max_bytes_in_join)), o número de buckets será aumentado, assim como o bucket atribuído a cada linha. Todas as linhas que não pertencem ao bucket atual são descarregadas e reatribuídas.

Oferece suporte a `INNER/LEFT/RIGHT/FULL ALL/ANY JOIN`.

* hash

O [algoritmo hash join](https://en.wikipedia.org/wiki/Hash_join) é usado. É a implementação mais genérica, compatível com todas as combinações de kind e strictness e com várias chaves de junção combinadas com `OR` na seção `JOIN ON`.

Ao usar o algoritmo `hash`, a parte direita de `JOIN` é carregada na RAM.

* parallel\_hash

Uma variação de `hash` join que divide os dados em buckets e constrói simultaneamente várias tabelas hash em vez de apenas uma, para acelerar esse processo.

Ao usar o algoritmo `parallel_hash`, a parte direita de `JOIN` é carregada na RAM.

* partial\_merge

Uma variação do [algoritmo sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join), em que apenas a tabela da direita é totalmente ordenada.

`RIGHT JOIN` e `FULL JOIN` têm suporte apenas com strictness `ALL` (`SEMI`, `ANTI`, `ANY` e `ASOF` não têm suporte).

Ao usar o algoritmo `partial_merge`, o ClickHouse ordena os dados e os grava em disco. O algoritmo `partial_merge` no ClickHouse difere ligeiramente da implementação clássica. Primeiro, o ClickHouse ordena a tabela da direita pelas chaves de junção em blocos e cria um índice min-max para os blocos ordenados. Em seguida, ordena partes da tabela da esquerda pela `join key` e faz a junção com a tabela da direita. O índice min-max também é usado para ignorar blocos desnecessários da tabela da direita.

* direct

O algoritmo `direct` (também conhecido como nested loop) realiza um lookup na tabela da direita usando as linhas da tabela da esquerda como chaves.
É compatível com armazenamentos especiais, como tabelas [Dicionário](/docs/pt-BR/reference/engines/table-engines/special/dictionary), [EmbeddedRocksDB](/docs/pt-BR/reference/engines/table-engines/integrations/embedded-rocksdb) e [MergeTree](/docs/pt-BR/reference/engines/table-engines/mergetree-family/mergetree).

Para tabelas MergeTree, o algoritmo envia filtros de chave de junção diretamente para a camada de armazenamento. Isso pode ser mais eficiente quando a chave pode usar o índice de chave primária da tabela para lookups; caso contrário, ele executa varreduras completas na tabela da direita para cada bloco da tabela da esquerda.

Oferece suporte a junções `INNER` e `LEFT` e apenas a chaves de junção de igualdade de uma única coluna, sem outras condições.

* auto

Quando definido como `auto`, `hash` join é tentado primeiro, e o algoritmo é alterado dinamicamente para outro algoritmo se o limite de memória for excedido.

* full\_sorting\_merge

[Algoritmo sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join) com ordenação completa das tabelas unidas antes da junção.

* prefer\_partial\_merge

O ClickHouse sempre tenta usar `partial_merge` join, se possível; caso contrário, usa `hash`. *Descontinuado*; é o mesmo que `partial_merge,hash`.

* default (descontinuado)

Valor legado; não use mais.
O mesmo que `direct,hash`, ou seja, tente usar direct join e hash join (nessa ordem).

<div id="join_any_take_last_row">
  ## join\_any\_take\_last\_row
</div>

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

Altera o comportamento das operações JOIN com strictness `ANY` quando a tabela da direita tem mais de uma linha correspondente para uma chave.

<Note>
  Essa configuração se aplica a tabelas com o motor [`Join`](/docs/pt-BR/reference/engines/table-engines/special/join) e a algoritmos de join baseados em hash.

  Se um join for executado em paralelo, a ordem das linhas pode ser não determinística. Isso significa que `join_any_take_last_row = 1` pode retornar uma linha não determinística em consultas `ANY JOIN`.
</Note>

Valores possíveis:

* 0 — Se a tabela da direita tiver mais de uma linha correspondente, apenas a primeira encontrada será combinada.
* 1 — Se a tabela da direita tiver mais de uma linha correspondente, apenas a última encontrada será combinada.

Veja também:

* [cláusula JOIN](/docs/pt-BR/reference/statements/select/join)
* [motor de tabela Join](/docs/pt-BR/reference/engines/table-engines/special/join)
* [join\_default\_strictness](/docs/pt-BR/reference/settings/session-settings/join#join_default_strictness)

<div id="join_default_strictness">
  ## join\_default\_strictness
</div>

<SettingsInfoBlock type="JoinStrictness" default_value="ALL" />

Define a strictness padrão das [cláusulas JOIN](/docs/pt-BR/reference/statements/select/join).

Valores possíveis:

* `ALL` — Se a tabela da direita tiver várias linhas correspondentes, o ClickHouse cria um [produto cartesiano](https://en.wikipedia.org/wiki/Cartesian_product) com as linhas correspondentes. Esse é o comportamento normal de `JOIN` no SQL padrão.
* `ANY` — Se a tabela da direita tiver várias linhas correspondentes, somente a primeira encontrada é combinada. Se a tabela da direita tiver apenas uma linha correspondente, os resultados de `ANY` e `ALL` serão os mesmos.
* `ASOF` — Para junção de sequências com correspondência incerta.
* `Empty string` — Se `ALL` ou `ANY` não for especificado na consulta, o ClickHouse lança uma exceção.

<div id="join_on_disk_max_files_to_merge">
  ## join\_on\_disk\_max\_files\_to\_merge
</div>

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

Limita o número de arquivos permitidos para a ordenação paralela em operações MergeJoin quando são executadas em disco.

Quanto maior o valor da configuração, mais RAM é usada e menos E/S de disco é necessária.

Valores possíveis:

* Qualquer número inteiro positivo, a partir de 2.

<div id="join_output_by_rowlist_perkey_rows_threshold">
  ## join\_output\_by\_rowlist\_perkey\_rows\_threshold
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.9"},{"label": "5"},{"label": "O limite inferior da média de linhas por chave na tabela à direita para determinar se a saída deve ser feita por lista de linhas em hash join."}]}]} />

O limite inferior da média de linhas por chave na tabela à direita para determinar se a saída deve ser feita por lista de linhas em hash join.

<div id="join_overflow_mode">
  ## join\_overflow\_mode
</div>

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

Define qual ação o ClickHouse executa quando um JOIN atinge qualquer um dos seguintes limites:

* [max\_bytes\_in\_join](/docs/pt-BR/reference/settings/session-settings/max-bytes#max_bytes_in_join)
* [max\_rows\_in\_join](/docs/pt-BR/reference/settings/session-settings/max-rows#max_rows_in_join)

Essa configuração só é considerada para os valores `hash` e `parallel_hash`
de [`join_algorithm`](/docs/pt-BR/reference/settings/session-settings/join#join_algorithm). Outros
algoritmos (por exemplo, `partial_merge`, `grace_hash`, `auto`) lidam com esses
limites de outra forma — fazendo spill para disco, reparticionando ou mudando
de estratégia — veja
[`join_algorithm`](/docs/pt-BR/reference/settings/session-settings/join#join_algorithm).

Valores possíveis:

* `THROW` — o ClickHouse lança uma exceção e interrompe a consulta.
* `BREAK` — o ClickHouse interrompe a consulta e não lança uma exceção.

Valor padrão: `THROW`.

**Veja também**

* [cláusula JOIN](/docs/pt-BR/reference/statements/select/join)
* [motor de tabela Join](/docs/pt-BR/reference/engines/table-engines/special/join)

<div id="join_use_nulls">
  ## join\_use\_nulls
</div>

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

Define o comportamento de [JOIN](/docs/pt-BR/reference/statements/select/join). Ao combinar tabelas, células vazias podem aparecer. O ClickHouse as preenche de forma diferente com base nessa configuração.

Valores possíveis:

* 0 — As células vazias são preenchidas com o valor padrão do tipo de campo correspondente.
* 1 — `JOIN` se comporta da mesma forma que no SQL padrão. O tipo do campo correspondente é convertido para [Nullable](/docs/pt-BR/reference/data-types/nullable), e as células vazias são preenchidas com [NULL](/docs/pt-BR/reference/syntax).
