Passer au contenu principal
Structure de données préparée facultative pour les opérations JOIN.
Dans ClickHouse Cloud, si votre service a été créé avec une version antérieure à 25.4, vous devrez définir la compatibilité sur 25.4 minimum à l’aide de SET compatibility=25.4.

Créer une table

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
Consultez la description détaillée de la requête CREATE TABLE.

Paramètres du moteur

join_strictness

join_strictnessstrictesse de JOIN.

join_type

join_typetype de JOIN.

Colonnes clés

k1[, k2, ...] – Colonnes clés de la clause USING utilisées par l’opération JOIN. Saisissez les paramètres join_strictness et join_type sans guillemets, par exemple Join(ANY, LEFT, col1). Ils doivent correspondre à l’opération JOIN pour laquelle la table sera utilisée. Si les paramètres ne correspondent pas, ClickHouse ne lève pas d’exception et peut renvoyer des données incorrectes.

Spécificités et recommandations

Stockage des données

Les données de la table Join se trouvent toujours en RAM. Lors de l’insertion de lignes dans une table, ClickHouse écrit des blocs de données dans le répertoire situé sur le disque afin de pouvoir les restaurer au redémarrage du serveur. Si le serveur redémarre incorrectement, le bloc de données sur le disque peut être perdu ou endommagé. Dans ce cas, vous devrez peut-être supprimer manuellement le fichier contenant les données endommagées.

Sélection et insertion de données

Vous pouvez utiliser des requêtes INSERT pour ajouter des données aux tables du moteur Join. Si la table a été créée avec la strictesse ANY, les données associées à des clés dupliquées sont ignorées. Avec la strictesse ALL, toutes les lignes sont ajoutées. Les principaux cas d’utilisation des tables du moteur Join sont les suivants :
  • Placer la table du côté droit dans une clause JOIN.
  • Appeler la fonction joinGet, qui permet d’extraire des données de la table de la même manière que depuis un dictionnaire.

Suppression des données

Les requêtes ALTER DELETE pour les tables utilisant le moteur Join sont implémentées sous forme de mutations. La mutation DELETE lit les données filtrées et réécrit les données en mémoire et sur disque.

Limitations et paramètres

Lors de la création d’une table, les paramètres suivants sont appliqués :

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

Persistant

Désactive la persistance pour les moteurs de table Join et Set. Réduit le surcoût d’E/S. Convient aux scénarios privilégiant les performances et ne nécessitant pas de persistance. Valeurs possibles :
  • 1 — Activé.
  • 0 — Désactivé.
Valeur par défaut : 1. Les tables du moteur Join ne peuvent pas être utilisées dans des opérations GLOBAL JOIN. Le moteur Join permet de définir le paramètre join_use_nulls dans l’instruction CREATE TABLE. La requête SELECT doit utiliser la même valeur pour join_use_nulls.

Exemples d’utilisation

Création de la table de gauche :
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11), (2,12), (3,13);
Création de la table Join de droite :
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
INSERT INTO id_val_join VALUES (1,21), (1,22), (3,23);
Jointure de tables :
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
Autre possibilité : vous pouvez récupérer des données à partir de la table Join en spécifiant la valeur de la clé de jointure :
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
Suppression d’une ligne de la table Join :
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
Dernière modification le 29 juin 2026