ClickHouse/docs/fr/engines/table_engines/special/join.md
2020-04-04 12:15:31 +03:00

5.3 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true f865c9653f 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

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.

Article Original