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

Dictionary レイアウト

Dictionary のレイアウトタイプ

Dictionary をメモリ上に保存する方法にはさまざまな種類があり、それぞれ CPU および RAM の使用量にトレードオフがあります。

Layout説明
flatキーでインデックスされたフラットな配列にデータを格納します。最も高速なレイアウトですが、キーは UInt64 であり、max_array_size の範囲内である必要があります。
hashedデータをハッシュテーブルに格納します。キーサイズにも要素数にも制限がありません。
sparse_hashedhashed に似ていますが、CPU を多く消費する代わりにメモリ使用量を抑えます。
complex_key_hashed複合キー向けの hashed に似たレイアウトです。
complex_key_sparse_hashed複合キー向けの sparse_hashed に似たレイアウトです。
hashed_array属性を配列に格納し、キーから配列インデックスへのマッピングをハッシュテーブルで管理します。多くの属性を扱う場合にメモリ効率が高くなります。
complex_key_hashed_array複合キー向けの hashed_array に似たレイアウトです。
range_hashedソートされた範囲を持つハッシュテーブルです。キー + 日付/時刻の範囲によるルックアップをサポートします。
complex_key_range_hashed複合キー向けの range_hashed に似たレイアウトです。
cache固定サイズのインメモリキャッシュです。頻繁にアクセスされるキーのみが保存されます。
complex_key_cache複合キー向けの cache に似たレイアウトです。
ssd_cachecache に似ていますが、データを SSD 上に保存し、インメモリのインデックスを持ちます。
complex_key_ssd_cache複合キー向けの ssd_cache に似たレイアウトです。
directインメモリでの保存を行わず、各リクエストごとにソースを直接クエリします。
complex_key_direct複合キー向けの direct に似たレイアウトです。
ip_trie高速な IP プレフィックスルックアップ(CIDR ベース)のための Trie 構造です。
推奨レイアウト

flathashed、および complex_key_hashed は、最も優れたクエリ性能を提供します。 キャッシュ系レイアウトは、性能が出にくく、パラメータ調整も困難なため推奨されません。詳細は cache を参照してください。

Dictionary レイアウトを指定する

ヒント

ClickHouse Cloud でディクショナリを使用している場合は、ディクショナリの作成に DDL クエリオプションを使用し、ユーザー default でディクショナリを作成してください。 また、Cloud 互換性ガイド でサポートされているディクショナリソースの一覧を確認してください。

Dictionary レイアウトは、DDL では LAYOUT 句、設定ファイル定義では 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 のパフォーマンスを改善する方法がいくつかあります。

  • Dictionary を操作する関数は GROUP BY の後に呼び出します。
  • 抽出する属性を単射としてマークします。 属性は、異なるキーに対して異なる属性値が対応する場合に単射と呼ばれます。 そのため、GROUP BY がキーから属性値を取得する関数を使用している場合、この関数は自動的に GROUP BY の外に分離されます。

ClickHouse は Dictionary に関連するエラーに対して例外をスローします。 エラーの例としては次のようなものがあります。

  • アクセスしようとしている Dictionary をロードできなかった。
  • cached Dictionary へのクエリでエラーが発生した。

system.dictionaries テーブルで Dictionary の一覧とそのステータスを確認できます。