Este motor permite integrar ClickHouse con Redis. Dado que Redis utiliza un modelo clave-valor, recomendamos encarecidamente realizar únicamente consultas puntuales, como where k=xx o where k in (xx, xx).
Crear una tabla
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);Parámetros del motor
host:port— dirección del servidor Redis; puede omitir el puerto y se usará el puerto predeterminado de Redis, 6379.db_index— el índice de la base de datos de Redis va de 0 a 15; el valor predeterminado es 0.password— contraseña del usuario; el valor predeterminado es una cadena vacía.pool_size— tamaño máximo del grupo de conexiones de Redis; el valor predeterminado es 16.primary_key_name- cualquier nombre de columna de la lista de columnas.
Los argumentos también pueden pasarse mediante colecciones con nombre. En este caso, host y port deben especificarse por separado. Este enfoque se recomienda para entornos de producción. En este momento, todos los parámetros pasados a Redis mediante colecciones con nombre son obligatorios.
Ejemplo de uso
Cree una tabla en ClickHouse usando el motor Redis con argumentos básicos:
CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);O bien usando colecciones con nombre:
<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);Inserción:
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 │
└─────┴────┴────┴────┘Actualización:
Tenga en cuenta que la clave primaria no se puede actualizar.
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';Eliminar:
ALTER TABLE redis_table DELETE WHERE key='1';TRUNCATE:
Vacía la base de datos de Redis de forma asíncrona. Además, Truncate también admite el modo SYNC.
TRUNCATE TABLE redis_table SYNC;Join:
Join con otras tablas.
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;Limitaciones
El motor Redis también admite consultas de escaneo, como where k > xx, pero tiene algunas limitaciones:
- En casos muy poco frecuentes, una consulta de escaneo puede producir claves duplicadas durante el rehashing. Consulta más detalles en Redis Scan.
- Durante el escaneo, las claves pueden crearse y eliminarse, por lo que el conjunto de datos resultante no puede representar un momento concreto en el tiempo.