--- title: "ClickHouse 数据字典" date: 2020-09-23T13:30:00+08:00 lastmod: 2020-10-08T18:50:00+08:00 tags: [] categories: ["clickhouse"] --- ## 简介 - 常驻内存,支持动态更新 - 适合保存常量和经常使用的维度表数据 - 可通过字典函数访问,也可通过袋里表与其他数据表实现 JOIN 查询 ## 内置字典 - 默认禁用 - 不想写了,没啥意思 ## 外部扩展字典 ### 配置文件 - 位置: /etc/clickhouse-server/\*\_dictionary.xml - 自动感知变更,不停机在线更新 - 系统表: system.dictionaries - 配置结构 ```xml dict_name field_name field_name field_type ... field_name String field_name field_name field_name field_type false false false 16384 16384 /path/to/data.csv CSV cat /path/to/data.csv CSV http://192.168.1.2:9080/data.csv CSV root 123456 192.168.1.3 1 3306 db_name table_name
id=1 sql
default 192.168.1.4 9000 default table_name
id=1 sql
192.168.1.5 27017 db_name collection_name 300 360
...
``` ### 操作 - 手动更新全部数据字典 ```sql SYSTEM RELOAD DICTIONARIES; ``` - 手动更新指定字典 ```sql SYSTEM RELOAD DICTIONARY dict_name ``` - 查看所有字典信息 ```sql SELECT name, type, key, attribute.names, attribute.types source FROM system.dictionaries; ``` - 字典函数查询 ```sql SELECT dictGet('dict_name', 'attr_name', key) ``` - 其他字典函数 - 无符号整型: dictGetUInt8、dictGetUInt16、dictGetUInt32、dictGetUInt64 - 整型: dictGetInt8、dictGetInt16、dictGetInt32、dictGetInt64 - 浮点数: dictGetFloat32、dictGetFloat64 - 字符串: ditGetString、dictGetUUID - 日期: dictGetDate、dictGetDateTime - ddl 创建字典 ```sql CREATE DICTIONARY dict_name( ... ) PRIMARY KEY id LAYOUT(FLAT()) SOURCE(FILE(PATH '/path/to/data.csv' FORMAT CSV)) LIFETIME(1); ``` ## Dictionary 表引擎 - 创建字典表 ```sql CREATE TABLE table_name( ... ) ENGINE = Dictionary(dict_name); ``` - dict_name: 已加载的字典名称 - 创建字典数据库,自动为每个字典创建对应的字典表 ```sql CREATE DATABASE dict_db ENGINE = Dictionary; ```