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

# ajustes de sesión join_*

> Ajustes de sesión de ClickHouse en el grupo generado 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"
  }}>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>;
};

Estas configuraciones están disponibles en [system.settings](/docs/es/reference/system-tables/settings) y se autogeneran a partir del [código fuente](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' quedó obsoleto en favor de algoritmos join especificados explícitamente; además, ahora se prefiere parallel_hash a hash"}]}]} />

Especifica qué algoritmo [JOIN](/docs/es/reference/statements/select/join) se utiliza.

Se pueden especificar varios algoritmos, y se elegirá uno disponible para una consulta concreta en función de kind/estrictez y del motor de tabla.

Valores posibles:

* grace\_hash

Se utiliza [Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join). Grace hash ofrece una opción de algoritmo que permite realizar joins complejos con buen rendimiento y limitar el uso de memoria.

La primera fase de un grace join lee la tabla derecha y la divide en N buckets según el valor hash de las columnas clave (inicialmente, N es `grace_hash_join_initial_buckets`). Esto se hace de forma que cada bucket pueda procesarse de manera independiente. Las filas del primer bucket se añaden a una hash table en memoria, mientras que las demás se guardan en disco. Si la hash table supera el memory limit (por ejemplo, el configurado en [`max_bytes_in_join`](/docs/es/reference/settings/session-settings/max-bytes#max_bytes_in_join)), se incrementa el número de buckets y se reasigna el bucket correspondiente a cada fila. Las filas que no pertenezcan al bucket actual se descargan y se reasignan.

Admite `INNER/LEFT/RIGHT/FULL ALL/ANY JOIN`.

* hash

Se utiliza el [algoritmo hash join](https://en.wikipedia.org/wiki/Hash_join). Es la implementación más genérica y admite todas las combinaciones de kind y estrictez, así como varias join keys combinadas con `OR` en la sección `JOIN ON`.

Cuando se usa el algoritmo `hash`, la parte derecha de `JOIN` se carga en RAM.

* parallel\_hash

Una variación de `hash` join que divide los datos en buckets y construye varias hash tables de forma simultánea, en lugar de una sola, para acelerar este proceso.

Cuando se usa el algoritmo `parallel_hash`, la parte derecha de `JOIN` se carga en RAM.

* partial\_merge

Una variación del [algoritmo sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join), en la que solo la tabla derecha se ordena por completo.

`RIGHT JOIN` y `FULL JOIN` solo se admiten con estrictez `ALL` (`SEMI`, `ANTI`, `ANY` y `ASOF` no son compatibles).

Cuando se usa el algoritmo `partial_merge`, ClickHouse ordena los datos y los vuelca a disco. El algoritmo `partial_merge` en ClickHouse difiere ligeramente de la implementación clásica. Primero, ClickHouse ordena la tabla derecha por join keys en bloques y crea un índice min-max para los bloques ordenados. Después, ordena partes de la tabla izquierda por la `join key` y las combina con la tabla derecha. El índice min-max también se utiliza para omitir bloques innecesarios de la tabla derecha.

* direct

El algoritmo `direct` (también conocido como nested loop) realiza una lookup en la tabla derecha usando como claves las filas de la tabla izquierda.
Es compatible con almacenamientos especiales como [Dictionary](/docs/es/reference/engines/table-engines/special/dictionary), [EmbeddedRocksDB](/docs/es/reference/engines/table-engines/integrations/embedded-rocksdb) y tablas [MergeTree](/docs/es/reference/engines/table-engines/mergetree-family/mergetree).

Para las tablas MergeTree, el algoritmo envía los filtros de join key directamente a la storage layer. Esto puede ser más eficiente cuando la clave puede usar el primary key index de la tabla para lookups; de lo contrario, realiza escaneos completos de la tabla derecha para cada block de la tabla izquierda.

Admite joins `INNER` y `LEFT`, y solo join keys de igualdad de una sola columna sin otras condiciones.

* auto

Cuando se establece en `auto`, primero se prueba `hash` join y el algoritmo cambia dinámicamente a otro algoritmo si se supera el memory limit.

* full\_sorting\_merge

[Algoritmo sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join) con ordenación completa de las tablas combinadas antes de realizar el join.

* prefer\_partial\_merge

ClickHouse siempre intenta usar `partial_merge` join si es posible; en caso contrario, usa `hash`. *Obsoleto*, igual que `partial_merge,hash`.

* default (obsoleto)

Valor heredado; no lo use más.
Igual que `direct,hash`; es decir, intenta usar direct join y hash join (en este orden).

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

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

Cambia el comportamiento de las operaciones JOIN con estrictez `ANY` cuando la tabla derecha tiene más de una fila coincidente para una clave.

<Note>
  Esta configuración se aplica a las tablas con motor [`Join`](/docs/es/reference/engines/table-engines/special/join) y a los algoritmos de join basados en hash.

  Si un join se construye en paralelo, el orden de las filas puede no ser determinista. Esto significa que `join_any_take_last_row = 1` puede devolver una fila no determinista en las consultas `ANY JOIN`.
</Note>

Valores posibles:

* 0 — Si la tabla derecha tiene más de una fila coincidente, solo se une la primera fila encontrada.
* 1 — Si la tabla derecha tiene más de una fila coincidente, solo se une la última fila encontrada.

Véase también:

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

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

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

Establece la estrictez predeterminada para las [cláusulas JOIN](/docs/es/reference/statements/select/join).

Valores posibles:

* `ALL` — Si la tabla de la derecha tiene varias filas coincidentes, ClickHouse crea un [producto cartesiano](https://en.wikipedia.org/wiki/Cartesian_product) a partir de las filas coincidentes. Este es el comportamiento normal de `JOIN` en standard SQL.
* `ANY` — Si la tabla de la derecha tiene varias filas coincidentes, solo se combina la primera que se encuentra. Si la tabla de la derecha tiene solo una fila coincidente, los resultados de `ANY` y `ALL` son los mismos.
* `ASOF` — Para combinar secuencias con una coincidencia incierta.
* `Cadena vacía` — Si no se especifica `ALL` o `ANY` en la consulta, ClickHouse lanza una excepción.

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

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

Limita el número de archivos que se pueden usar para la ordenación paralela en operaciones MergeJoin cuando se ejecutan en disco.

Cuanto mayor sea el valor de esta configuración, más RAM se usará y menos operaciones de E/S en disco se necesitarán.

Valores posibles:

* Cualquier entero 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": "El límite inferior del promedio de filas por clave en la tabla de la derecha para determinar si la salida debe generarse como una lista de filas en hash join."}]}]} />

El límite inferior del promedio de filas por clave en la tabla de la derecha para determinar si la salida debe generarse como una lista de filas en hash join.

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

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

Define qué acción realiza ClickHouse cuando una operación JOIN alcanza cualquiera de los siguientes límites:

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

Esta configuración solo se aplica a los valores `hash` y `parallel_hash` de
[`join_algorithm`](/docs/es/reference/settings/session-settings/join#join_algorithm). Otros
algoritmos (por ejemplo, `partial_merge`, `grace_hash`, `auto`) gestionan los
límites de forma diferente: mediante volcado a disco, reparticionamiento o cambio de
estrategia; consulte
[`join_algorithm`](/docs/es/reference/settings/session-settings/join#join_algorithm).

Valores posibles:

* `THROW` — ClickHouse lanza una excepción y detiene la consulta.
* `BREAK` — ClickHouse detiene la consulta y no lanza ninguna excepción.

Valor predeterminado: `THROW`.

**Véase también**

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

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

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

Establece el comportamiento de [JOIN](/docs/es/reference/statements/select/join). Al combinar tablas, pueden aparecer celdas vacías. ClickHouse las rellena de forma distinta según esta configuración.

Valores posibles:

* 0 — Las celdas vacías se rellenan con el valor predeterminado del tipo del campo correspondiente.
* 1 — `JOIN` se comporta igual que en SQL estándar. El tipo del campo correspondiente se convierte en [Nullable](/docs/es/reference/data-types/nullable), y las celdas vacías se rellenan con [NULL](/docs/es/reference/syntax).
