join_algorithm
- grace_hash
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
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
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
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
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
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
- prefer_partial_merge
partial_merge si possible, sinon il utilise hash. Déprécié, identique à partial_merge,hash.
- default (déprécié)
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
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.- 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.
join_default_strictness
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 comportementJOINordinaire 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 deANYetALLsont identiques.ASOF— Pour joindre des séquences avec une correspondance incertaine.Chaîne vide— SiALLouANYn’est pas spécifié dans la requête, ClickHouse lève une exception.
join_on_disk_max_files_to_merge
- Tout entier positif à partir de 2.
join_output_by_rowlist_perkey_rows_threshold
join_overflow_mode
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.
THROW.
Voir aussi