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

# paramètres de session join_*

> Paramètres de session ClickHouse du groupe généré 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
  }}>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](/docs/fr/reference/system-tables/settings) et sont générés automatiquement à partir du [code source](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' a été déprécié au profit d'algorithmes de jointure explicitement spécifiés, et parallel_hash est désormais préféré à hash"}]}]} />

Spécifie quel algorithme de [JOIN](/docs/fr/reference/statements/select/join) est utilisé.

Plusieurs algorithmes peuvent être spécifiés, et un algorithme disponible est choisi pour une requête donnée en fonction du type, de la strictness et du moteur de table.

Valeurs possibles :

* grace\_hash

Le [grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join) est utilisé. Grace hash fournit une option d'algorithme permettant d'exécuter des jointures complexes de manière performante tout en limitant l'utilisation de la mémoire.

La première phase d'une grace join lit la table de droite et la divise en N buckets selon la valeur de hachage des colonnes clés (initialement, N vaut `grace_hash_join_initial_buckets`). Cela est fait de façon à garantir que chaque bucket puisse être traité indépendamment. Les lignes du premier bucket sont ajoutées à une table de hachage en mémoire, tandis que les autres sont enregistrées sur disque. Si la table de hachage dépasse la limite de mémoire (par exemple, telle que définie par [`max_bytes_in_join`](/docs/fr/reference/settings/session-settings/max-bytes#max_bytes_in_join), le nombre de buckets augmente, ainsi que le bucket attribué à chaque ligne. Toutes les lignes qui n'appartiennent pas au bucket courant sont vidées et réattribuées.

Prend en charge `INNER/LEFT/RIGHT/FULL ALL/ANY JOIN`.

* hash

L'[algorithme de hash join](https://en.wikipedia.org/wiki/Hash_join) est utilisé. Il s'agit de l'implémentation la plus générique, qui prend en charge toutes les combinaisons de type et de strictness, ainsi que plusieurs clés de jointure combinées avec `OR` dans la section `JOIN ON`.

Lors de l'utilisation de l'algorithme `hash`, la partie droite de `JOIN` est chargée en RAM.

* parallel\_hash

Une variante de la jointure `hash` qui divise les données en buckets et construit plusieurs tables de hachage en parallèle au lieu d'une seule afin d'accélérer ce processus.

Lors de l'utilisation de l'algorithme `parallel_hash`, la partie droite de `JOIN` est chargée en RAM.

* partial\_merge

Une variante de l'[algorithme sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join), dans laquelle seule la table de droite est entièrement triée.

`RIGHT JOIN` et `FULL JOIN` ne sont pris en charge qu'avec la strictness `ALL` (`SEMI`, `ANTI`, `ANY` et `ASOF` ne sont pas pris en charge).

Lors de l'utilisation de l'algorithme `partial_merge`, ClickHouse trie les données et les écrit sur disque. L'algorithme `partial_merge` de ClickHouse diffère légèrement de l'implémentation classique. D'abord, ClickHouse trie la table de droite par clés de jointure, par blocs, et crée un index min-max pour les blocs triés. Ensuite, il trie des parties de la table de gauche par `join key` et les joint à la table de droite. L'index min-max est également utilisé pour ignorer les blocs inutiles de la table de droite.

* direct

L'algorithme `direct` (également appelé boucle imbriquée) effectue une recherche dans la table de droite en utilisant les lignes de la table de gauche comme clés.
Il est pris en charge par des stockages spéciaux tels que [Dictionary](/docs/fr/reference/engines/table-engines/special/dictionary), [EmbeddedRocksDB](/docs/fr/reference/engines/table-engines/integrations/embedded-rocksdb) et les tables [MergeTree](/docs/fr/reference/engines/table-engines/mergetree-family/mergetree).

Pour les tables MergeTree, l'algorithme pousse directement les filtres de clé de jointure vers la couche de stockage. Cela peut être plus efficace lorsque la clé peut utiliser l'index de clé primaire de la table pour les recherches ; sinon, il effectue un parcours complet de la table de droite pour chaque bloc de la table de gauche.

Prend en charge les jointures `INNER` et `LEFT`, et uniquement des clés de jointure d'égalité sur une seule colonne, sans autre condition.

* auto

Lorsqu'il est défini sur `auto`, la jointure `hash` est essayée en premier, et l'algorithme bascule à la volée vers un autre algorithme si la limite de mémoire est dépassée.

* full\_sorting\_merge

[Algorithme sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join) avec tri complet des tables jointes avant la jointure.

* prefer\_partial\_merge

ClickHouse essaie toujours d'utiliser la jointure `partial_merge` si possible, sinon il utilise `hash`. *Déprécié*, identique à `partial_merge,hash`.

* default (déprécié)

Valeur héritée, veuillez ne plus l'utiliser.
Identique à `direct,hash`, c'est-à-dire qu'il essaie d'utiliser une jointure directe puis une jointure par hachage (dans cet ordre).

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

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

Modifie le comportement des opérations de jointure de type `ANY` lorsque la table de droite contient plus d’une ligne correspondante pour une clé.

<Note>
  Ce paramètre s’applique aux tables utilisant le moteur [`Join`](/docs/fr/reference/engines/table-engines/special/join) et aux algorithmes de jointure basés sur le hachage.

  Si une jointure est construite en parallèle, l’ordre des lignes peut être non déterministe. Cela signifie que `join_any_take_last_row = 1` peut renvoyer une ligne de manière non déterministe pour les requêtes `ANY JOIN`.
</Note>

Valeurs possibles :

* 0 — Si la table de droite contient plus d’une ligne correspondante, seule la première trouvée est utilisée pour la jointure.
* 1 — Si la table de droite contient plus d’une ligne correspondante, seule la dernière trouvée est utilisée pour la jointure.

Voir aussi :

* [clause JOIN](/docs/fr/reference/statements/select/join)
* [moteur de table Join](/docs/fr/reference/engines/table-engines/special/join)
* [join\_default\_strictness](/docs/fr/reference/settings/session-settings/join#join_default_strictness)

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

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

Définit la strictness par défaut des [clauses JOIN](/docs/fr/reference/statements/select/join).

Valeurs possibles :

* `ALL` — Si la table de droite comporte plusieurs lignes correspondantes, ClickHouse crée un [produit cartésien](https://en.wikipedia.org/wiki/Cartesian_product) à partir de ces lignes. Il s'agit du comportement `JOIN` ordinaire du SQL standard.
* `ANY` — Si la table de droite comporte plusieurs lignes correspondantes, seule la première trouvée est utilisée pour la jointure. Si la table de droite ne comporte qu'une seule ligne correspondante, les résultats de `ANY` et `ALL` sont identiques.
* `ASOF` — Pour joindre des séquences avec une correspondance incertaine.
* `Chaîne vide` — Si `ALL` ou `ANY` n'est pas spécifié dans la requête, ClickHouse lève une exception.

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

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

Limite le nombre de fichiers autorisés pour le tri parallèle lors des opérations MergeJoin exécutées sur disque.

Plus la valeur du paramètre est élevée, plus la quantité de RAM utilisée augmente et moins les E/S disque sont nécessaires.

Valeurs possibles :

* Tout entier positif à 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": "La limite inférieure de la moyenne de lignes par clé dans la table de droite, utilisée pour déterminer s’il faut produire la sortie sous forme de liste de lignes dans un hash join."}]}]} />

La limite inférieure de la moyenne de lignes par clé dans la table de droite, utilisée pour déterminer s’il faut produire la sortie sous forme de liste de lignes dans un hash join.

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

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

Définit l’action effectuée par ClickHouse lorsqu’une jointure atteint l’une des limites suivantes :

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

Ce paramètre n’est respecté que pour les valeurs `hash` et `parallel_hash`
de [`join_algorithm`](/docs/fr/reference/settings/session-settings/join#join_algorithm). Les autres
algorithmes (par exemple, `partial_merge`, `grace_hash`, `auto`) gèrent ces
limites différemment — en écrivant sur disque, en repartitionnant ou en changeant
de stratégie — voir
[`join_algorithm`](/docs/fr/reference/settings/session-settings/join#join_algorithm).

Valeurs possibles :

* `THROW` — ClickHouse lève une exception et arrête la requête.
* `BREAK` — ClickHouse arrête la requête sans lever d’exception.

Valeur par défaut : `THROW`.

**Voir aussi**

* [clause JOIN](/docs/fr/reference/statements/select/join)
* [moteur de table Join](/docs/fr/reference/engines/table-engines/special/join)

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

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

Définit le comportement de [JOIN](/docs/fr/reference/statements/select/join). Lors de la jointure de tables, des cellules vides peuvent apparaître. ClickHouse les remplit différemment selon ce paramètre.

Valeurs possibles :

* 0 — Les cellules vides sont remplies avec la valeur par défaut du type du champ correspondant.
* 1 — `JOIN` se comporte comme en standard SQL. Le type du champ correspondant est converti en [Nullable](/docs/fr/reference/data-types/nullable), et les cellules vides sont remplies avec [NULL](/docs/fr/reference/syntax).
