--- machine_translated: true machine_translated_rev: d734a8e46ddd7465886ba4133bff743c55190626 toc_priority: 44 toc_title: "\u8F9E\u66F8\u306E\u30AD\u30FC\u3068\u30D5\u30A3\u30FC\u30EB\u30C9" --- # 辞書のキーとフィールド {#dictionary-key-and-fields} その `` 条項の辞書のキーや分野での利用ます。 XMLの説明: ``` xml Id ... ``` 属性は要素に記述されています: - `` — [キー列](external-dicts-dict-structure.md#ext_dict_structure-key). - `` — [データ列](external-dicts-dict-structure.md#ext_dict_structure-attributes). 複数の属性を指定できます。 DDLクエリ: ``` sql CREATE DICTIONARY dict_name ( Id UInt64, -- attributes ) PRIMARY KEY Id ... ``` 属性はクエリ本文に記述されます: - `PRIMARY KEY` — [キー列](external-dicts-dict-structure.md#ext_dict_structure-key) - `AttrName AttrType` — [データ列](external-dicts-dict-structure.md#ext_dict_structure-attributes). 複数の属性を指定できます。 ## キー {#ext_dict_structure-key} ClickHouseは次の種類のキーをサポートしています: - 数値キー。 `UInt64`. で定義される `` タグまたは使用 `PRIMARY KEY` キーワード。 - 複合キー。 異なるタイプの値のセット。 タグ内で定義されている `` または `PRIMARY KEY` キーワード。 Xmlの構造を含むことができま `` または ``. DDL-クエリにsingleを含める必要があります `PRIMARY KEY`. !!! warning "警告" Keyを属性として記述することはできません。 ### 数値キー {#ext_dict-numeric-key} タイプ: `UInt64`. 構成例: ``` xml Id ``` 設定フィールド: - `name` – The name of the column with keys. DDLクエリの場合: ``` sql CREATE DICTIONARY ( Id UInt64, ... ) PRIMARY KEY Id ... ``` - `PRIMARY KEY` – The name of the column with keys. ### 複合キー {#composite-key} キーは次のようになります `tuple` フィールドの任意のタイプから。 その [レイアウト](external-dicts-dict-layout.md) この場合、 `complex_key_hashed` または `complex_key_cache`. !!! tip "ヒント" 複合キーは、単一の要素で構成できます。 これにより、たとえば文字列をキーとして使用することができます。 キー構造は要素で設定されます ``. キーフィールドは、ディクショナリと同じ形式で指定します [属性](external-dicts-dict-structure.md). 例えば: ``` xml field1 String field2 UInt32 ... ... ``` または ``` sql CREATE DICTIONARY ( field1 String, field2 String ... ) PRIMARY KEY field1, field2 ... ``` クエリの場合 `dictGet*` 関数は、タプルがキーとして渡されます。 例えば: `dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))`. ## 属性 {#ext_dict_structure-attributes} 構成例: ``` xml ... Name ClickHouseDataType rand64() true true true ``` または ``` sql CREATE DICTIONARY somename ( Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID ) ``` 設定フィールド: | タグ | 説明 | 必須 | |------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------| | `name` | 列名。 | はい。 | | `type` | ClickHouseデータタイプ。
ClickHouseは、dictionaryから指定されたデータ型に値をキャストしようとします。 例えば、MySQLの場合、フィールドは次のようになります `TEXT`, `VARCHAR`、または `BLOB` MySQLソーステーブルでは、次のようにアップロードできます `String` クリックハウスで。
[Nullable](../../../sql-reference/data-types/nullable.md) サポートされていない。 | はい。 | | `null_value` | 既存の要素以外の要素のデフォルト値。
この例では、空の文字列です。 使用できません `NULL` この分野で。 | はい。 | | `expression` | [式](../../syntax.md#syntax-expressions) そのClickHouseはその値を実行します。
この式には、リモートsqlデータベースの列名を指定できます。 したがって、これを使用して、リモート列の別名を作成できます。

デフォルト値:式なし。 | いいえ。 | | `hierarchical` | もし `true`、属性は、現在のキーの親キーの値が含まれています。 見る [階層辞書](external-dicts-dict-hierarchical.md).

デフォルト値: `false`. | いいえ。 | | `injective` | このフラグは、 `id -> attribute` 画像は [射影](https://en.wikipedia.org/wiki/Injective_function).
もし `true`、ClickHouseはの後に自動的に置くことができます `GROUP BY` 句注入を伴う辞書への要求。 通常、そのような要求の量が大幅に削減されます。

デフォルト値: `false`. | いいえ。 | | `is_object_id` | MongoDBドキュメントに対してクエリが実行されるかどうかを示すフラグ `ObjectID`.

デフォルト値: `false`. | いいえ。 | ## また見なさい {#see-also} - [外部辞書を操作するための関数](../../../sql-reference/functions/ext-dict-functions.md). [元の記事](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_structure/)