mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-16 03:12:43 +00:00
4.7 KiB
4.7 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/engines/table-engines/integrations/redis | 175 | Redis |
Redis
このエンジンは、ClickHouseをRedisと統合することを可能にします。Redisはkvモデルを採用しているため、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
- カラムリスト内の任意のカラム名です。
:::note シリアル化
PRIMARY KEY
は1つのカラムのみをサポートします。主キーはRedisキーとしてバイナリでシリアル化されます。
主キー以外のカラムはRedis値として対応する順序でバイナリでシリアル化されます。
:::
引数はnamed collectionsを使用して渡すこともできます。この場合、host
と port
は別々に指定する必要があります。この方法は本番環境で推奨されます。現在、Redisにnamed collectionsを使用して渡されるすべてのパラメータは必須です。
:::note フィルタリング
key equals
や in filtering
を使用したクエリは、Redisからのマルチキー検索に最適化されます。フィルタリングキーなしのクエリでは、すべてのテーブルをスキャンすることになりますが、これは重い操作です。
:::
使用例
Redis
エンジンを使用してClickHouseにテーブルを作成する例:
CREATE TABLE redis_table
(
`key` String,
`v1` UInt32,
`v2` String,
`v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);
またはnamed collectionsを使用する場合:
<named_collections>
<redis_creds>
<host>localhost</host>
<port>6379</port>
<password>****</password>
<pool_size>16</pool_size>
<db_index>s0</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';
削除:
Redisデータベースを非同期的にフラッシュします。また、Truncate
はSYNCモードをサポートしています。
TRUNCATE TABLE redis_table SYNC;
結合:
他のテーブルと結合します。
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;
制限
Redisエンジンはwhere k > xx
のようなスキャンクエリもサポートしますが、いくつかの制限があります:
- スキャンクエリは、再ハッシング中に非常に稀に重複したキーを生成する場合があります。Redis Scanの詳細を参照してください。
- スキャン中にキーが作成または削除される可能性があり、結果として得られるデータセットは有効な時点を表すことができません。