Dictionary レイアウトの種類
| レイアウト | 説明 |
|---|---|
| flat | キーで索引付けされたフラットな配列にデータを格納します。最も高速なレイアウトですが、キーは UInt64 で、max_array_size 以内である必要があります。 |
| hashed | ハッシュテーブルにデータを格納します。キーサイズに制限はなく、任意の数の要素をサポートします。 |
| sparse_hashed | hashed と似ていますが、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 | 固定サイズのインメモリ cache です。頻繁にアクセスされるキーだけを格納します。 |
| complex_key_cache | cache と同様ですが、複合キーに対応します。 |
| ssd_cache | cache と同様ですが、データは SSD に格納され、索引はメモリ内に保持されます。 |
| complex_key_ssd_cache | ssd_cache と同様ですが、複合キーに対応します。 |
| direct | メモリ内には格納せず、リクエストごとにソースへ直接クエリします。 |
| complex_key_direct | direct と同様ですが、複合キーに対応します。 |
| ip_trie | IP プレフィックスを高速にルックアップするための Trie 構造です (CIDR ベース) 。 |
Dictionary のレイアウトを指定する
LAYOUT 句 (DDL の場合) または設定ファイル定義の layout 設定で指定できます。
- DDL
- 設定ファイル
完全な DDL 構文については、CREATE DICTIONARY も参照してください。 レイアウト名に
complex-key* を含まない Dictionary は UInt64 型のキーを持ち、complex-key* Dictionary は複合キー (複雑で、任意の型を持つキー) を持ちます。
数値キーの例 (カラム key_column は UInt64 型) :
- DDL
- 設定ファイル
複合キーの例 (キーは String 型の要素を 1 つ持ちます) :
- DDL
- 設定ファイル
Dictionary のパフォーマンスを向上させる
GROUP BYの後で、Dictionary を使用する関数を呼び出します。- 取得する属性を injective としてマークします。
異なるキーに異なる属性値が対応する場合、その属性は injective と呼ばれます。
そのため、
GROUP BYでキーから属性値を取得する関数を使用している場合、この関数は自動的にGROUP BYから除外されます。
- アクセスしている Dictionary を読み込めない。
cachedDictionary のクエリ時のエラー。