Tous les produits
Search
Centre de documentation

ApsaraDB for ClickHouse:Dictionnaires

Dernière mise à jour :Aug 27, 2026

Lorsque vos données métier contiennent des données constantes ou peuvent être séparées en tables de faits et de dimensions, utilisez des dictionnaires à la place des tables de dimension pour éviter les jointures (JOIN) et améliorer les performances des requêtes. Créez, modifiez et utilisez des dictionnaires externes dans Alibaba Cloud ClickHouse.

Prérequis

La source de données et le cluster cible doivent se trouver dans la même région et le même VPC, avec une liste d'autorisation d'adresses IP mutuelle. Si ce n'est pas le cas, résolvez d'abord les problèmes de connectivité. Résolution des problèmes de connectivité réseau entre un cluster cible et une source de données.

Remarque

Exécutez SELECT * FROM system.clusters; pour afficher les adresses IP de votre cluster Alibaba Cloud ClickHouse.

Pour savoir comment configurer une liste d'autorisation d'adresses IP pour ClickHouse, consultez la rubrique Configuration d'une liste d'autorisation d'adresses IP.

Notes d'utilisation

Vous ne pouvez pas utiliser la console pour gérer les dictionnaires des clusters Alibaba Cloud ClickHouse exécutant la version 21.8 ou ultérieure. Gérez-les plutôt à l'aide d'instructions SQL telles que CREATE DICTIONARY.

Création d'une configuration de dictionnaire

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Dans le coin supérieur gauche de la page, sélectionnez la région où se trouve le cluster cible.

  3. Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID de votre cluster cible.

  4. Dans le volet de navigation de gauche, cliquez sur Dictionary Management.

  5. Dans le coin supérieur droit de la page, cliquez sur Add Dictionary Configuration.

  6. Dans la boîte de dialogue Add Dictionary Configuration, configurez les paramètres.

    Le tableau suivant répertorie les principaux paramètres du dictionnaire. Pour la référence complète des paramètres, consultez la documentation Dictionaries.

    Paramètre

    Description

    <name>

    Nom personnalisé du dictionnaire. Doit être globalement unique.

    <source>

    Source de données du dictionnaire. Sources prises en charge :

    • MySQL

    • ClickHouse

    <lifetime>

    Fréquence de mise à jour des données du dictionnaire, en secondes.

    <layout>

    Disposition en mémoire du dictionnaire. Sept types sont disponibles :

    • Clé numérique

      • flat

      • hashed

      • range_hashed

      • cache

    • Clé composite

      • complex_key_hashed

      • complex_key_cache

      • ip_trie

    <structure>

    Structure des données du dictionnaire.

    Remarque

    Vous ne pouvez ajouter qu'un seul nœud à la fois.

  7. Une fois les paramètres configurés, cliquez sur OK. Le dictionnaire est créé.

    Après la création, vous pouvez afficher, modifier ou supprimer le dictionnaire depuis la colonne Actions.

DDL des dictionnaires

Les clusters exécutant la version 20.8 ou ultérieure prennent en charge le DDL des dictionnaires pour créer directement des dictionnaires externes. Vérifiez la version de votre cluster sur la page Cluster Information dans la console.

CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
(
    key1 type1  [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
    key2 type2  [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
    attr1 type2 [DEFAULT|EXPRESSION expr3],
    attr2 type2 [DEFAULT|EXPRESSION expr4]
)
PRIMARY KEY key1, key2
SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))
LAYOUT(LAYOUT_NAME([param_name param_value]))
LIFETIME([MIN val1] MAX val2)

Les exemples suivants illustrent la création de dictionnaires à partir de différentes sources de données.

Source : Alibaba Cloud ClickHouse

  1. Préparez les données.

    1. Créez une table source.

      CREATE TABLE default.cities ( id UInt64, city_name String)ENGINE = Memory;
    2. Importez les données de test.

      INSERT INTO default.cities (id, city_name) VALUES(1, 'Beijing'),(2, 'Shanghai'),(3, 'Guangzhou'),(4, 'Shenzhen');
  2. Créez le dictionnaire.

    CREATE DICTIONARY default.city_dict (
     id UInt64,
     city_name String
    )
    PRIMARY KEY id
    SOURCE(CLICKHOUSE( USER 'username' PASSWORD 'password' TABLE 'cities' DB 'default' ))
    LAYOUT(HASHED())
    LIFETIME(MIN 300 MAX 360);

La source est un autre Alibaba Cloud ClickHouse

  1. Préparez les données.

    1. Créez une table source.

      CREATE TABLE default.cities ( id UInt64, city_name String)ENGINE = Memory;
    2. Importez les données de test.

      INSERT INTO default.cities (id, city_name) VALUES(1, 'Beijing'),(2, 'Shanghai'),(3, 'Guangzhou'),(4, 'Shenzhen');
  2. Créez le dictionnaire.

    CREATE DICTIONARY default.city_dict (
     id UInt64,
     city_name String
    )
    PRIMARY KEY id
    SOURCE(CLICKHOUSE(
     HOST 'cc-xxx.clickhouse.ads.aliyuncs.com'
     PORT 3306
     USER 'username'
     PASSWORD 'password'
     DB 'default'
     TABLE 'cities'
    ))
    LAYOUT(HASHED())
    LIFETIME(MIN 300 MAX 360);

ApsaraDB RDS for MySQL

  1. Préparez les données dans l'instance ApsaraDB RDS for MySQL.

    1. Créez une base de données et une table source.

      CREATE DATABASE testdb;
      CREATE TABLE testdb.cities ( id INT PRIMARY KEY, city_name VARCHAR(255));
    2. Importez les données de test.

      INSERT INTO testdb.cities (id, city_name) VALUES(1, 'Beijing'),(2, 'Shanghai'),(3, 'Guangzhou'),(4, 'Shenzhen');
  2. Créez le dictionnaire.

    CREATE DICTIONARY default.city_dict (
     id UInt64,
     city_name String
    )
    PRIMARY KEY id
    SOURCE(MYSQL(
     HOST 'rm-xxx.mysql.rds.aliyuncs.com'
     PORT 3306
     USER 'username'
     PASSWORD 'password'
     DB 'testdb'
     TABLE 'cities'
    ))
    LAYOUT(HASHED())
    LIFETIME(MIN 300 MAX 360);

Requête personnalisée

  1. Préparez les données.

    1. Créez une table source.

      CREATE TABLE default.cities ( id UInt64, city_name String)ENGINE = Memory;
    2. Importez les données de test.

      INSERT INTO default.cities (id, city_name) VALUES(1, 'Beijing'),(2, 'Shanghai'),(3, 'Guangzhou'),(4, 'Shenzhen');
  2. Créez le dictionnaire.

    CREATE DICTIONARY default.my_dict
    (
     id UInt64,
     city_name String
    )
    PRIMARY KEY id
    SOURCE(CLICKHOUSE(
    USER 'username' 
    PASSWORD 'password' 
    DB 'default' 
    QUERY 'SELECT id, city_name FROM default.cities where id<2'
    ))
    LAYOUT(HASHED())
    LIFETIME(MIN 300 MAX 600);

Utilisation d'un dictionnaire

Interrogation des métadonnées du dictionnaire

SELECT
    name,
    type,
    key,
    attribute.names,
    attribute.types,
    bytes_allocated,
    element_count,
    source
FROM system.dictionaries

Interrogation des données du dictionnaire

Utilisez dictGet pour récupérer des données à partir d'un dictionnaire. Pour la syntaxe complète, consultez la documentation officielle de ClickHouse.

dictGet(<dict_name>, <attr_name>, <id_expr>)
dictGetOrDefault(<dict_name>, <attr_name>, <id_expr>, <default_value_expr>)