跳转到主内容
跳转到主内容

字典属性

提示

如果你在 ClickHouse Cloud 中使用字典,请使用 DDL 查询方式来创建字典,并使用用户 default 创建字典。 另外,请在 Cloud Compatibility 指南 中核对受支持的字典数据源列表。

structure 子句用于描述字典键以及可用于查询的字段。

XML 描述:

<dictionary>
    <structure>
        <id>
            <name>Id</name>
        </id>

        <attribute>
            <!-- Attribute parameters -->
        </attribute>

        ...

    </structure>
</dictionary>

属性通过以下元素来描述:

  • <id> — 键列
  • <attribute> — 数据列:可以有多个属性。

DDL 查询:

CREATE DICTIONARY dict_name (
    Id UInt64,
    -- attributes
)
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。在这种情况下,layout 必须是 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
)

配置字段:

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

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

默认值:false
No
injective标志位,用于指示 id -> attribute 映射是否为单射
如果为 true,ClickHouse 可以在 GROUP BY 子句之后自动插入对具有单射属性的字典的请求。通常,这会显著减少此类请求的数量。

默认值:false
No
is_object_id标志位,用于指示是否通过 ObjectID 来为 MongoDB 文档执行查询。

默认值:false
No