structure 句では、クエリで使用できる辞書キーとフィールドを定義します。
XML の説明:
<dictionary>
<structure>
<id>
<name>Id</name>
</id>
<attribute>
<!-- attributeのパラメータ -->
</attribute>
...
</structure>
</dictionary>属性は次の要素で表されます:
<id>— キーカラム<attribute>— データカラム: 属性は複数指定できます。
DDLクエリ:
CREATE DICTIONARY dict_name (
Id UInt64,
-- 属性
)
PRIMARY KEY Id
...属性はクエリのボディ内で記述します:
PRIMARY KEY— キーカラムAttrName AttrType— データカラム。属性は複数指定できます。
キー
ClickHouse は、次の種類のキーをサポートしています。
- 数値キー。
UInt64。<id>タグ、またはPRIMARY KEYキーワードで定義します。 - 複合キー。異なる型の値の集合。
<key>タグ、またはPRIMARY KEYキーワードで定義します。
XML 構造には <id> と <key> のどちらか一方のみを含めることができます。DDLクエリには PRIMARY KEY を1つだけ含める必要があります。
数値キー
型: UInt64。
設定例:
<id>
<name>Id</name>
</id>設定項目:
name– キーを含むカラム名。
DDLクエリの場合:
CREATE DICTIONARY (
Id UInt64,
...
)
PRIMARY KEY Id
...PRIMARY KEY– キーとなるカラムの名前。
複合キー
キーには、任意の型のフィールドからなるtupleを指定できます。この場合、layoutはcomplex_key_hashedまたはcomplex_key_cacheである必要があります。
キーの構造は<key>要素で設定します。キーのフィールドは、Dictionaryの属性と同じ形式で指定します。例:
<structure>
<key>
<attribute>
<name>field1</name>
<type>String</type>
</attribute>
<attribute>
<name>field2</name>
<type>UInt32</type>
</attribute>
...
</key>
...または
CREATE DICTIONARY (
field1 String,
field2 UInt32
...
)
PRIMARY KEY field1, field2
...dictGet* 関数へのクエリでは、キーとしてタプルを渡します。例: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).
複合キーが単一の属性で構成されている場合、キーの値はtupleで囲まずに直接渡すことができます。たとえば、dictGetString('dict_name', 'attr_name', 'key')とdictGetString('dict_name', 'attr_name', tuple('key'))はいずれも有効です。
属性
設定例:
<structure>
...
<attribute>
<name>Name</name>
<type>ClickHouseDataType</type>
<null_value></null_value>
<expression>rand64()</expression>
<hierarchical>true</hierarchical>
<injective>true</injective>
<is_object_id>true</is_object_id>
</attribute>
</structure>または
CREATE DICTIONARY somename (
Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
)設定フィールド:
| タグ | 説明 | 必須 |
|---|---|---|
name |
カラム名。 | はい |
type |
ClickHouseのデータ型: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64, UUID, Decimal32, Decimal64, Decimal128, Decimal256,Date, Date32, DateTime, DateTime64, String, Array. ClickHouseは、Dictionaryの値を指定されたデータ型にCASTしようとします。たとえばMySQLでは、MySQLのソーステーブル内のフィールドが TEXT、VARCHAR、または BLOB であっても、ClickHouseでは String として取り込めます。Nullable は現在、Flat, Hashed, ComplexKeyHashed, Direct, ComplexKeyDirect, RangeHashed, Polygon, Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache Dictionaryでサポートされています。IPTrie Dictionaryでは、 Nullable 型はサポートされていません。 |
はい |
null_value |
存在しない要素に対するデフォルト値。 この例では空文字列です。NULL 値を使用できるのは Nullable 型のみです (型の説明がある前の行を参照してください) 。 |
はい |
expression |
ClickHouseが値に対して実行するExpression。 この式には、リモートSQLデータベース内のカラム名を指定できます。そのため、リモートカラムの alias を作成するために使用できます。 デフォルト値: 式なし。 |
いいえ |
hierarchical |
true の場合、この属性には現在のキーに対応する親キーの値が含まれます。Hierarchical Dictionaries を参照してください。デフォルト値: false。 |
いいえ |
injective |
id -> attribute の写像がinjectiveであるかどうかを示すフラグ。true の場合、ClickHouseは injective な Dictionary に対するリクエストを GROUP BY clause の後に自動的に配置できます。通常、これによりそのようなリクエスト数を大幅に減らせます。デフォルト値: false。 |
いいえ |
is_object_id |
MongoDBドキュメントに対するクエリが ObjectID によって実行されるかどうかを示すフラグ。デフォルト値: false。 |