跳转到主要内容
如果您在 ClickHouse Cloud 中使用字典,请使用 DDL 查询选项创建字典,并以 default 用户创建。 此外,请在 Cloud 兼容性指南 中确认受支持的字典源列表。
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_hashedcomplex_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))

属性

配置示例:
<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列名。
typeClickHouse 数据类型:UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64UUIDDecimal32Decimal64Decimal128Decimal256DateDate32DateTimeDateTime64StringArray
ClickHouse 会尝试将字典中的值转换为指定的数据类型。例如,对于 MySQL,字段在 MySQL 源表中可能是 TEXTVARCHARBLOB,但在 ClickHouse 中可以作为 String 导入。
Nullable 目前支持用于 FlatHashedComplexKeyHashedDirectComplexKeyDirectRangeHashed、Polygon、CacheComplexKeyCacheSSDCacheSSDComplexKeyCache 字典。在 IPTrie 字典中,不支持 Nullable 类型。
null_value不存在元素的默认值。
在该示例中,它是空字符串。只有 Nullable 类型才能使用 NULL 值 (请参见上一行的类型说明) 。
expressionClickHouse 在该值上执行的 Expression
该表达式可以是远程 SQL 数据库中的列名。因此,你可以用它为远程列创建别名。

默认值:无表达式。
hierarchical如果为 true,则该属性包含当前键的父键值。请参见 Hierarchical Dictionaries

默认值:false
injective用于表明 id -> attribute 映射是否为 injective 的标志。
如果为 true,ClickHouse 可以自动将具有单射性质的字典请求移到 GROUP BY 子句之后。通常这会显著减少此类请求的数量。

默认值:false
is_object_id用于表明查询是否通过 ObjectID 针对 MongoDB 文档执行的标志。

默认值:false
最后修改于 2026年6月10日