Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Motor de tabla Redis

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:

Querysql
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>
Querysql
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);

Inserción:

Querysql
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);
Querysql
SELECT COUNT(*) FROM redis_table;
Responsetext
┌─count()─┐
│       2 │
└─────────┘
Querysql
SELECT * FROM redis_table WHERE key='1';
Responsetext
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1   │  1 │ 1  │  1 │
└─────┴────┴────┴────┘
Querysql
SELECT * FROM redis_table WHERE v1=2;
Responsetext
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2   │  2 │ 2  │  2 │
└─────┴────┴────┴────┘

Actualización:

Tenga en cuenta que la clave primaria no se puede actualizar.

Querysql
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';

Eliminar:

Querysql
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.

Querysql
TRUNCATE TABLE redis_table SYNC;

Join:

Join con otras tablas.

Querysql
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:

  1. En casos muy poco frecuentes, una consulta de escaneo puede producir claves duplicadas durante el rehashing. Consulta más detalles en Redis Scan.
  2. 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.
Navigation