Ce moteur permet d’intégrer ClickHouse à Redis. Comme Redis repose sur un modèle clé-valeur, nous vous recommandons vivement de ne l’interroger que de façon ciblée, par exemple avec where k=xx ou where k in (xx, xx).
Création d’une table
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
name1 [type1],
name2 [type2],
...
) ENGINE = Redis({host:port[, db_index[, password[, pool_size]]] | named_collection[, option=value [,..]] })
PRIMARY KEY(primary_key_name);Paramètres du moteur
host:port— adresse du serveur Redis ; vous pouvez omettre le port, et le port Redis par défaut6379sera utilisé.db_index— index de la base de données Redis, compris entre 0 et 15 ; la valeur par défaut est 0.password— mot de passe de l’utilisateur ; la valeur par défaut est une chaîne vide.pool_size— taille maximale du pool de connexions Redis ; la valeur par défaut est 16.primary_key_name- n’importe quel nom de colonne dans la liste des colonnes.
Les arguments peuvent également être transmis à l’aide de collections nommées. Dans ce cas, host et port doivent être spécifiés séparément. Cette approche est recommandée pour l’environnement de production. À l’heure actuelle, tous les paramètres transmis à Redis via des collections nommées sont obligatoires.
Exemple d'utilisation
Créez une table dans ClickHouse en utilisant le moteur Redis avec des arguments simples :
CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);Ou à l’aide des collections nommées :
<named_collections>
<redis_creds>
<host>localhost</host>
<port>6379</port>
<password>****</password>
<pool_size>16</pool_size>
<db_index>0</db_index>
</redis_creds>
</named_collections>CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);Insertion :
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);SELECT COUNT(*) FROM redis_table;┌─count()─┐
│ 2 │
└─────────┘SELECT * FROM redis_table WHERE key='1';┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1 │ 1 │ 1 │ 1 │
└─────┴────┴────┴────┘SELECT * FROM redis_table WHERE v1=2;┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2 │ 2 │ 2 │ 2 │
└─────┴────┴────┴────┘Mise à jour :
Notez qu’il n’est pas possible de mettre à jour la clé primaire.
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';Supprimer :
ALTER TABLE redis_table DELETE WHERE key='1';TRUNCATE :
Vide la base de données Redis de manière asynchrone. Le mode SYNC est également pris en charge par Truncate.
TRUNCATE TABLE redis_table SYNC;Jointure :
Jointure avec d’autres tables.
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;Limites
Le moteur Redis prend également en charge les requêtes de balayage, telles que where k > xx, mais il présente certaines limites :
- Une requête de balayage peut, dans de très rares cas, produire des clés en double lors du rehashing. Voir les détails dans Redis Scan.
- Pendant le balayage, des clés peuvent être créées et supprimées. L'ensemble de données obtenu ne peut donc pas correspondre à un instantané cohérent à un moment donné.