本文介绍了新建、修改和使用ClickHouse外部扩展字典的操作步骤。
背景信息
ClickHouse数据字典分为外部扩展字典和内置字典,其中内置字典为ClickHouse预定义字典内容,外部扩展字典提供多种灵活的自定义的数据源定义,使用相对更加广泛,本文所讨论的数据字典为ClickHouse外部扩展字典。在数仓开发和数据分析过程中,当业务中有常量数据或者业务数据可以划分为业务事实表和业务维度表时,您可以通过使用数据字典来替代维度表实现,避免使用Join语句,从而提升查询效率。
新建字典配置
字典表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官方文档。