You need to enable JavaScript to run this app.
导航
数据字典
最近更新时间:2025.08.01 18:22:20首次发布时间:2023.07.25 10:17:29
复制全文
我的收藏
有用
有用
无用
无用

ByteHouse CDW 数据字典支持内部预定义字典内容。本文介绍了如何创建和使用数据字典。

创建字典表

您可以直接在 SQL 工作台使用 DDL 语句来新建字典表。

CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name
(
    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 min_val MAX max_val | max_val})

参数说明

参数名称

是否必填

说明

IF NOT EXISTS

可选关键字,存在同名字典时不报错。

[db.]dictionary_name

设置字典所属数据库和字典名称。

keyN typeN

字典键字段及类型,用于唯一标识条目。
示例:key1 UInt64, key2 String

DEFAULT

EXPRESSION expr

HIERARCHICAL

INJECTIVE

IS_OBJECT_ID

  • HIERARCHICAL:层级关系
  • INJECTIVE:唯一映射
  • IS_OBJECT_ID:对象 ID 特性

attrN typeN

字典属性字段及类型,存储关联数据。

PRIMARY KEY key1, key2

指定哪些键组合作为主键。

SOURCE(SOURCE_NAME(...))

数据源类型及参数,支持内部数据源,配置详情请参考数据源配置示例

LAYOUT(LAYOUT_NAME(...))

字典数据存储布局,支持 flat、hashed 等。

LIFETIME({MIN min_val MAX max_val

max_val})

  • MIN:最小刷新间隔 (秒)
  • MAX:最大刷新间隔 (秒)

数据源配置示例

SOURCE 配置详情如下:

SOURCE(CLICKHOUSE(
    user 'default'
    [db 'dbName']
    table 'ids'
    where 'id=10'
))

参数说明:

  • user:固定为 default。
  • db:可选,数据源表所在的数据库名称。
  • table: 作为数据源的具体表名。
  • where: 可选,用于过滤源表数据的 SQL WHERE 子句条件。

使用字典表

您可以执行查询字典数据、删除数据、查询字典、查询创建字典的语句等操作。

查询字典数据

您可以使用一些函数来获取字典的信息,常用的函数可以参考 ClickHouse 社区字典函数
例如,通过使用dictGet / dictGetOrDefault 语句和函数获取数据字典中的数据:

dictGet('db.dict_name', 'attr_name', id_expr)
dictGetOrDefault('db.dict_name', 'attr_name', id_expr, default_value_expr)

说明

dictGet 函数的第一个参数的格式必须类似于 db.dict_name,因为字典缓存通过该字段来索引。

检查字典中是否存在某个键id_expr

dictHas('db.dict_name', id_expr)

删除字典

执行该操作后,ByteHouse 将删除 Catalog 中该字典的记录。

DROP DICTIONARY [IF EXISTS] [db.]dictionary_name;

查询字典

注意

执行 SHOW DICTIONARIES 需要 AccountAdmin 角色的 *.* 全局权限。请确保您具备此权限。如需配置,请联系管理员,参考角色管理授予权限。

SHOW DICTIONARIES [FROM <db>]; 

如果未指定 FROM 子句,则查询将返回当前数据库中的词典列表。

查询创建字典语句

SHOW CREATE DICTIONARY [db.] dictionary_name

该查询语句将返回一个字符串类型的 “statement” 列,该列的值为创建字典的 CREATE 语句,示例如下:
Image

最佳实践:创建并使用数据字典
  1. 创建数据库。

    Create Database test_db;
    
  2. 创建数据表。

    CREATE TABLE `test_db`.`range_key_dictionary_source_table` (
        `key` UInt64,
        `start_date` Date,
        `end_date` Date,
        `value` String,
        `value_nullable` Nullable(String)
    )
    ENGINE = CnchMergeTree()
    PRIMARY KEY (`key`, `start_date`) 
    ORDER BY (`key`, `start_date`, `end_date`)
    COMMENT='demo';
    
  3. 创建字典。

    CREATE DICTIONARY test_db.range_key_dictionary
    (
      `key` UInt64,
      `start_date` Date,
      `end_date` Date,
      `value` String,
      `value_nullable` String
    )
    PRIMARY KEY `key`
    SOURCE(CLICKHOUSE(USER 'default' DB 'test_db' TABLE 'range_key_dictionary_source_table'))
    LIFETIME(MIN 10 MAX 20)
    LAYOUT(COMPLEX_KEY_HASHED());
    
  4. 查询字典内容。

    SHOW DICTIONARIES FROM test_db; 
    

    输出结果示例如下:
    Image

  5. (可选)删除字典。

    DROP dictionary test_db.range_key_dictionary;