功能介绍
TCHouse-C 数据字典包括内置字典(ClickHouse 官方文档)和外部字典(ClickHouse 官方文档),其中内置字典为 ClickHouse 预定义字典内容,而外部字典提供多种灵活的外部数据源定义。ClickHouse 支持一些特殊函数配合字典在查询中使用,将字典与函数结合使用比将
JOIN
操作与引用表结合使用更简单、更有效。本文为您介绍通过控制台对外部字典进行的操作。注意事项
1. 通过控制台方式维护的数据字典会在全部计算节点生效。
2. 通过控制台方式新增的数据字典,只支持通过控制台进行维护(包括修改,删除等操作)。
3. 通过其他方式,如 SQL 命令等后台方式新增的数据字典,不支持通过控制台进行维护(包括修改,删除等操作)。
4. 通过控制台新建成功的字典表会默认添加到云数据仓库 TCHouse-C 的全局库 cdwch_{instanceId}_dictionary_database中。
注意
严禁通过控制台及其他方式(如SQL命令等后台方式)交叉维护同一个字典,否则会造成内容覆盖或丢失(如意外删除等)。
控制台操作步骤
1. 登录 TCHouse-C 控制台,在集群列表中选择对应的集群,在集群详情页面单击数据管理下的数据字典页面。
2. 可在当前页面查看已有的外部字典列表
3. 可以单击左上角新增字典创建新的外部字典,根据提示填写字典的各项信息,单击确认提交外部字典创建申请。
参数项 | 描述 | 参考文档 |
字典名称 | 自定义外部字典名称。由小写字母、数字和下划线组成,以字母开头,以字母或数字结尾,字数为2-64个字符。 | - |
数据源 | 选择外部字典的数据来源类型,目前 TCHouse-C 控制台可选择的数据源为:MySQL、ClickHouse | |
数据源连接 | 配置数据源信息,支持验证配置的外部源连通性。配置项包括: HOST:支持IP或域名,目前只支持通过私有网络连接 TCP PORT:TCP协议端口 USER:外部源的账号 PASSWORD:外部源账号的密码 | - |
源表信息 | 选择依赖的外部源的库、表,以及填写源配置项WHERE(表过滤条件)和INVALIDATEQUERY(查询检查字典状态,仅提取更新的数据) | |
数据结构 | 设置外部字典的主键字段和普通字段,包括: PRIMARY_KEY:选择主键字段,支持单主键或复合主键 COLUME_NAME:字段名称TYPE:字段类型。目前控制台支持选择的字段类型包括 UInt8、UInt16、UInt32、UInt64、Int8、Int16、Int32、Int64、Float32、Float64、Date、DateTime、UUID、String DEFAULT_VALUE:字段空数据时的默认值 EXPRESSION:表达式,描述字段(如果适用) IS_HIERARCHICAL:层次结构支持的指示,默认值:falseI S_INJECTIVE:指示内射映射“id -> 属性”,默认值:false | |
存储格式 | 选择外部字典的内存布局类型,包括: FLAT:整个字典以平面数组的形式存储在内存中,适用单主键 HASHED:整个字典以哈希表的形式存储在内存中,适用单主键 RANGE_HASHED:整个字典以哈希表的形式存储在内存中,有一个有序的范围数组及其对应的值,适用单主键,需设置表示范围的字段 CACHE:字典存储在具有一定数量单元格的缓存中,适用单主键。需设置缓存大小 COMPLEX_KEY_HASHED:类似于 HASHED,适用复合主键 COMPLEX_KEY_CACHE:类似于 CACHE,适用复合主键。需设置缓存大小 | |
更新周期 | 字典中数据的更新频率,单位:秒 |
4. 创建完成后的外部字典,可在列表中进行查看、修改、删除等操作。
SQL 方式管理外部字典
1.创建字典
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster](key1 type1 [DEFAULT|EXPRESSION expr1] [IS_OBJECT_ID],key2 type2 [DEFAULT|EXPRESSION expr2],attr1 type2 [DEFAULT|EXPRESSION expr3] [HIERARCHICAL|INJECTIVE],attr2 type2 [DEFAULT|EXPRESSION expr4] [HIERARCHICAL|INJECTIVE])PRIMARY KEY key1, key2SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))LAYOUT(LAYOUT_NAME([param_name param_value])``)LIFETIME({MIN min_val MAX max_val | max_val})
2.查看字典
SELECT * FROM system.dictionaries
3.删除字典
DROP DICTIONARY <database name>.<dictionary name>
外部字典使用
有些类型的字典可使用普通的
SELECT
查询,如:SELECT * FROM <database name>.<dictionary name>
也可以使用字典函数进行查询,如:
dictGet('dict_name', attr_names, id_expr)dictGetOrDefault('dict_name', attr_names, id_expr, default_value_expr)dictGetOrNull('dict_name', attr_name, id_expr)