Structure de données préparée facultative pour les opérations JOIN.
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_strictness – strictesse de JOIN.
join_type
join_type – type 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
max_rows_in_join
max_bytes_in_join
join_overflow_mode
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 │
└────┴─────┘