メインコンテンツへスキップ

Dictionary レイアウトの種類

Dictionary をメモリ内に格納する方法は複数あり、それぞれ CPU 使用量と RAM 使用量の間でトレードオフがあります。
レイアウト説明
flatキーで索引付けされたフラットな配列にデータを格納します。最も高速なレイアウトですが、キーは UInt64 で、max_array_size 以内である必要があります。
hashedハッシュテーブルにデータを格納します。キーサイズに制限はなく、任意の数の要素をサポートします。
sparse_hashedhashed と似ていますが、CPU 使用量と引き換えにメモリ使用量を抑えます。
complex_key_hashedhashed と同様ですが、複合キーに対応します。
complex_key_sparse_hashedsparse_hashed と同様ですが、複合キーに対応します。
hashed_arrayキーを配列インデックスに対応付けるハッシュテーブルを使い、属性を配列に格納します。属性数が多い場合にメモリ効率に優れます。
complex_key_hashed_arrayhashed_array と同様ですが、複合キーに対応します。
range_hashed順序付けされた範囲を持つハッシュテーブルです。キー + 日付/時刻の範囲によるルックアップをサポートします。
complex_key_range_hashedrange_hashed と同様ですが、複合キーに対応します。
cache固定サイズのインメモリ cache です。頻繁にアクセスされるキーだけを格納します。
complex_key_cachecache と同様ですが、複合キーに対応します。
ssd_cachecache と同様ですが、データは SSD に格納され、索引はメモリ内に保持されます。
complex_key_ssd_cachessd_cache と同様ですが、複合キーに対応します。
directメモリ内には格納せず、リクエストごとにソースへ直接クエリします。
complex_key_directdirect と同様ですが、複合キーに対応します。
ip_trieIP プレフィックスを高速にルックアップするための Trie 構造です (CIDR ベース) 。
推奨レイアウトflathashed、および complex_key_hashed は、最良のクエリパフォーマンスを提供します。 キャッシュ系レイアウトは、パフォーマンスが低くなる可能性があり、パラメータ調整も難しいため推奨されません。詳細は cache を参照してください。

Dictionary のレイアウトを指定する

ClickHouse Cloud で Dictionary を使用している場合は、DDLクエリオプションを使用して Dictionary を作成し、default ユーザーとして作成してください。 また、サポートされている Dictionary ソースの一覧は、Cloud Compatibility ガイドで確認してください。
Dictionary のレイアウトは、LAYOUT 句 (DDL の場合) または設定ファイル定義の layout 設定で指定できます。
CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- レイアウト設定
...

完全な DDL 構文については、CREATE DICTIONARY も参照してください。 レイアウト名に complex-key* を含まない Dictionary は UInt64 型のキーを持ち、complex-key* Dictionary は複合キー (複雑で、任意の型を持つキー) を持ちます。 数値キーの例 (カラム key_columnUInt64 型) :
CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

複合キーの例 (キーは String 型の要素を 1 つ持ちます) :
CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

Dictionary のパフォーマンスを向上させる

Dictionary のパフォーマンスを向上させる方法はいくつかあります。
  • GROUP BY の後で、Dictionary を使用する関数を呼び出します。
  • 取得する属性を injective としてマークします。 異なるキーに異なる属性値が対応する場合、その属性は injective と呼ばれます。 そのため、GROUP BY でキーから属性値を取得する関数を使用している場合、この関数は自動的に GROUP BY から除外されます。
ClickHouse は Dictionary に関するエラーに対して例外を生成します。 エラーの例としては、次のようなものがあります。
  • アクセスしている Dictionary を読み込めない。
  • cached Dictionary のクエリ時のエラー。
Dictionary の一覧とそのステータスは、system.dictionaries テーブルで確認できます。
最終更新日 2026年6月10日