5.3 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
40 | Rejoindre |
Rejoindre
Structure de données préparée pour l'utilisation dans JOIN opérations.
Création d'une Table
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
Voir la description détaillée de la CREATE TABLE requête.
Les Paramètres Du Moteur
join_strictness
– ADHÉRER à la rigueur.join_type
– Type de jointure.k1[, k2, ...]
– Key columns from theUSING
la clause que l'JOIN
l'opération est faite avec de la.
Entrer join_strictness
et join_type
paramètres sans guillemets, par exemple, Join(ANY, LEFT, col1)
. Ils doivent correspondre à la JOIN
fonctionnement que le tableau sera utilisé pour. Si les paramètres ne correspondent pas, ClickHouse ne lance pas d'exception et peut renvoyer des données incorrectes.
Utilisation Du Tableau
Exemple
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 du côté droit Join
table:
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)
Rejoindre les tables:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id) SETTINGS join_use_nulls = 1
┌─id─┬─val─┬─id_val_join.val─┐
│ 1 │ 11 │ 21 │
│ 2 │ 12 │ ᴺᵁᴸᴸ │
│ 3 │ 13 │ 23 │
└────┴─────┴─────────────────┘
Comme alternative, vous pouvez récupérer des données de la Join
table, 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 │
└────────────────────────────────────────────┘
Sélection et insertion de données
Vous pouvez utiliser INSERT
requêtes pour ajouter des données au Join
-tables de moteur. Si la table a été créée avec ANY
rigueur, les données pour les clés en double sont ignorées. Avec l' ALL
rigueur, toutes les lignes sont ajoutées.
Vous ne pouvez pas effectuer un SELECT
requête directement à partir de la table. Au lieu de cela, utilisez l'une des méthodes suivantes:
- Placez la table sur le côté droit dans un
JOIN
clause. - Appelez le joinGet fonction, qui vous permet d'extraire des données de la table de la même manière que d'un dictionnaire.
Limitations et paramètres
Lors de la création d'un tableau, les paramètres suivants sont appliqués:
Le Join
- les tables de moteur ne peuvent pas être utilisées dans GLOBAL JOIN
opérations.
Le Join
-moteur permet d'utiliser join_use_nulls réglage de la CREATE TABLE
déclaration. Et SELECT requête permet d'utiliser join_use_nulls
trop. Si vous avez différents join_use_nulls
paramètres, vous pouvez obtenir une table de jointure d'erreur. Il dépend de type de JOINTURE. Lorsque vous utilisez joinGet fonction, vous devez utiliser le même join_use_nulls
réglage en CRATE TABLE
et SELECT
déclaration.
Le Stockage De Données
Join
les données de la table sont toujours situées dans la RAM. Lors de l'insertion de lignes dans une table, ClickHouse écrit des blocs de données dans le répertoire du disque afin qu'ils puissent être restaurés lorsque le serveur redémarre.
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 des données endommagées.