本文介绍了新建、修改和使用ClickHouse外部扩展字典的操作步骤。
背景信息
ClickHouse数据字典分为外部扩展字典和内置字典,其中内置字典为ClickHouse预定义字典内容,外部扩展字典提供多种灵活的自定义的数据源定义,使用相对更加广泛,本文所讨论的数据字典为ClickHouse外部扩展字典。在数仓开发和数据分析过程中,当业务中有常量数据或者业务数据可以划分为业务事实表和业务维度表时,您可以通过使用数据字典来替代维度表实现,避免使用Join语句,从而提升查询效率。
注意事项
以下版本的云数据库ClickHouse集群不支持通过控制台管理数据字典。
21.8及以上版本的云数据库ClickHouse社区兼容版集群。
云数据库ClickHouse企业版集群。
您可以通过SQL查看和创建数据字典。具体操作,请参见创建字典。
新建字典配置
在页面左上角,选择目标集群所在的地域。
在集群列表页面,选择默认实例列表,单击目标集群ID。
在左侧导航栏,单击字典管理,进入字典列表页面。
单击右上角新增字典配置。
在弹出的新增字典配置窗口编辑模板填写字典内容。
参数
描述
<name>
自定义字典名称,必须全局唯一。
<source>
配置字典的数据源,表示字典中的数据来源。目前ClickHouse支持的数据源为:
MySQL
ClickHouse
<lifetime>
字典中数据的更新频率,单位:秒。
<layout>
内存中的数据格式类型,目前扩展字典共拥有7种类型。
单数值key
flat
hashed
range_hashed
cache
复合key
complex_key_hashed
complex_key_cache
ip_trie
<structure>
字典的数据结构。
说明单次只允许添加一个节点。
说明关于配置字典参数的更多详情,请参见ClickHouse官方文档。
填写完毕后单击确定,数据字典创建完成。
创建成功后,在数据字典对应的操作列,可进行查看、删除和修改。
字典表DDL
云数据库ClickHouse集群20.8之后的版本(您可以登录ClickHouse控制台-集群信息-查看版本号)增加了数据字典的DDL,您可以直接使用DDL语句新建扩展字典表。
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
(
key1 type1 [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
key2 type2 [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
attr1 type2 [DEFAULT|EXPRESSION expr3],
attr2 type2 [DEFAULT|EXPRESSION expr4]
)
PRIMARY KEY key1, key2
SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))
LAYOUT(LAYOUT_NAME([param_name param_value]))
LIFETIME([MIN val1] MAX val2)
数据字典的使用
字典表查询
SELECT name, type, key, attribute.names, attribute.types, bytes_allocated, element_count, source FROM system.dictionaries
查询字典数据
使用dictGet语句结合函数获取数据字典中的数据。
dictGet('dict_name', 'attr_name', id_expr)
或
dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr)
关于dictGet语句的更多详情,请参见ClickHouse官方文档。