Этот движок позволяет интегрировать ClickHouse с Redis. Поскольку Redis использует модель «ключ-значение» (key-value), мы настоятельно рекомендуем выполнять к нему только точечные запросы, например where k=xx или where k in (xx, xx).
Создание таблицы
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);Параметры движка
host:port— адрес сервера Redis; порт можно не указывать, тогда будет использован стандартный порт Redis 6379.db_index— индекс БД Redis в диапазоне от 0 до 15, по умолчанию — 0.password— пароль пользователя, по умолчанию — пустая строка.pool_size— максимальный размер пула соединений Redis, по умолчанию — 16.primary_key_name— любое имя столбца из списка столбцов.
Аргументы также можно передавать с помощью именованных коллекций. В этом случае host и port должны указываться отдельно. Такой подход рекомендуется для продакшн-среды. На данный момент все параметры, передаваемые в Redis через именованные коллекции, являются обязательными.
Пример использования
Создайте таблицу в ClickHouse, используя движок Redis с обычными аргументами:
CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);Или используя именованные коллекции:
<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);Вставка:
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 │
└─────┴────┴────┴────┘Обновление:
Обратите внимание, что первичный ключ нельзя изменить.
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';Удалить:
ALTER TABLE redis_table DELETE WHERE key='1';Truncate:
Асинхронно очищает БД Redis. Также Truncate поддерживает режим SYNC.
TRUNCATE TABLE redis_table SYNC;JOIN:
Соединение JOIN с другими таблицами.
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;Ограничения
Движок Redis также поддерживает сканирующие запросы, такие как where k > xx, но у этого есть некоторые ограничения:
- В очень редких случаях во время рехеширования сканирующий запрос может возвращать дублирующиеся ключи. Подробности см. в Redis Scan.
- Во время сканирования ключи могут создаваться и удаляться, поэтому получившийся набор данных не может представлять согласованное состояние на какой-либо момент времени.