数据字典

最近更新时间:2023-09-05 11:25:14

我的收藏

功能介绍

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:字段类型。目前控制台支持选择的字段类型包括 UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64DateDateTimeUUIDString
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, key2
SOURCE(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>
更多字典SQL的说明:ClickHouse 官方文档

外部字典使用

有些类型的字典可使用普通的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)
更多字典函数使用说明:ClickHouse 官方文档