Skip to main content
Ces paramètres sont disponibles dans system.settings et sont générés automatiquement à partir du code source.

join_algorithm

Spécifie quel algorithme de 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 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, 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 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, 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, EmbeddedRocksDB et les tables 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 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).

join_any_take_last_row

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é.
Ce paramètre s’applique aux tables utilisant le moteur 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.
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 :

join_default_strictness

Définit la strictness par défaut des clauses JOIN. Valeurs possibles :
  • ALL — Si la table de droite comporte plusieurs lignes correspondantes, ClickHouse crée un produit cartésien à 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.

join_on_disk_max_files_to_merge

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.

join_output_by_rowlist_perkey_rows_threshold

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.

join_overflow_mode

Définit l’action effectuée par ClickHouse lorsqu’une jointure atteint l’une des limites suivantes : Ce paramètre n’est respecté que pour les valeurs hash et parallel_hash de 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. 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

join_use_nulls

Définit le comportement de 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, et les cellules vides sont remplies avec NULL.
Dernière modification le 23 juillet 2026