structure 子句用于描述可供查询的字典键和各个字段。
XML 描述:
<dictionary>
<structure>
<id>
<name>Id</name>
</id>
<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。
数值键
类型:UInt64。
配置示例:
<id>
<name>Id</name>
</id>配置字段:
name– 存放键的列名。
对于 DDL 查询:
CREATE DICTIONARY (
Id UInt64,
...
)
PRIMARY KEY Id
...PRIMARY KEY– 键所在列的名称。
复合键
键可以是由任意类型的字段组成的 tuple。在这种情况下,布局必须为 complex_key_hashed 或 complex_key_cache。
键的结构在 <key> 元素中设置。键字段的指定格式与字典属性相同。示例:
<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 会尝试将字典中的值转换为指定的数据类型。例如,对于 MySQL,字段在 MySQL 源表中可能是 TEXT、VARCHAR 或 BLOB,但在 ClickHouse 中可以作为 String 导入。Nullable 目前支持用于 Flat、Hashed、ComplexKeyHashed、Direct、ComplexKeyDirect、RangeHashed、Polygon、Cache、ComplexKeyCache、SSDCache、SSDComplexKeyCache 字典。在 IPTrie 字典中,不支持 Nullable 类型。 |
是 |
null_value |
不存在元素的默认值。 在该示例中,它是空字符串。只有 Nullable 类型才能使用 NULL 值 (请参见上一行的类型说明) 。 |
是 |
expression |
ClickHouse 在该值上执行的 Expression。 该表达式可以是远程 SQL 数据库中的列名。因此,你可以用它为远程列创建别名。 默认值:无表达式。 |
否 |
hierarchical |
如果为 true,则该属性包含当前键的父键值。请参见 Hierarchical Dictionaries。默认值: false。 |
否 |
injective |
用于表明 id -> attribute 映射是否为 injective 的标志。如果为 true,ClickHouse 可以自动将具有单射性质的字典请求移到 GROUP BY 子句之后。通常这会显著减少此类请求的数量。默认值: false。 |
否 |
is_object_id |
用于表明查询是否通过 ObjectID 针对 MongoDB 文档执行的标志。默认值: false。 |