本文介绍了新建、修改和使用ClickHouse外部扩展字典的操作步骤。

背景信息

ClickHouse数据字典分为外部扩展字典和内置字典,其中内置字典为ClickHouse预定义字典内容,外部扩展字典提供多种灵活的自定义的数据源定义,使用相对更加广泛,本文所讨论的数据字典为ClickHouse外部扩展字典。在数仓开发和数据分析过程中,当业务中有常量数据或者业务数据可以划分为业务事实表和业务维度表时,您可以通过使用数据字典来替代维度表实现,避免使用Join语句,从而提升查询效率。

新建字典配置

  1. 使用阿里云账号登录云数据库ClickHouse控制台
  2. 在页面左上角,选择目标集群所在的地域。
  3. 在左侧导航栏,单击集群列表
  4. 找到目标集群,单击集群ID,进入集群详情页面。
  5. 在左侧导航栏,单击字典管理,进入字典列表页面。
  6. 单击右上角新增字典配置
  7. 在弹出的新增字典配置窗口编辑模板填写字典内容。
    参数 描述
    <name> 自定义字典名称,必须全局唯一。
    <source> 配置字典的数据源,表示字典中的数据来源。目前ClickHouse支持的数据源为:
    • MySQL
    • ClickHouse
    <lifetime> 字典中数据的更新频率,单位:秒。
    <layout> 内存中的数据格式类型,目前扩展字典共拥有7种类型。
    • 单数值key
      • flat
      • hashed
      • range_hashed
      • cache
    • 复合key
      • complex_key_hashed
      • complex_key_cache
      • ip_trie
    <structure> 字典的数据结构。
    说明 单次只允许添加一个节点。
  8. 填写完毕后单击确认

查看字典配置

  1. 使用阿里云账号登录云数据库ClickHouse控制台
  2. 在页面左上角,选择目标集群所在的地域。
  3. 在左侧导航栏,单击集群列表
  4. 找到目标集群,单击集群ID,进入集群详情页面。
  5. 在左侧导航栏,单击字典管理,进入字典列表页面。
  6. 单击右上角查看字典配置

字典表DDL

云数据库ClickHouse集群20.1之后的版本(您可以登录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)