龙空技术网

大数据ClickHouse进阶(十六):数据字典创建

Lansonli 14860

前言:

现时各位老铁们对“数据字典应该在建立”可能比较注意,小伙伴们都需要知道一些“数据字典应该在建立”的相关内容。那么小编也在网上汇集了一些对于“数据字典应该在建立””的相关资讯,希望我们能喜欢,小伙伴们快快来了解一下吧!

#头条创作挑战赛#

数据字典创建

一、简单介绍

数据字典是ClickHouse提供一种非常简单、实用的存储媒介,他以键值和属性映射的形式定义数据。字典中的数据会主动或者被动加载到内存并支持动态更新。由于字典数据常驻内存的特性,所以非常适合保存常量或经常使用的维度表数据,以避免不必要的JOIN查询。

数据字典分为内置与扩展两种形式,内置字典是ClickHouse默认自带的字典,外部字典是用户通过自定义配置实现的字典。ClickHouse目前只有一种内置字典:Yandex.Metrica字典,这个字典是ClickHouse自家产品上的字典,设计目的是快速存取地理数据,但是ClickHouse没有将地理数据公布出来,内置字典默认是禁用状态,想要使用内置字典还需要模拟数据然后开启,功能十分有限。在使用ClickHouse 字典时,外部扩展字典才是更加常用的功能。

在正常情况下,字典中的数据只能通过字典函数访问,ClickHouse设置了一类字典函数,专门用于字典数据的取用。我们也可以通过字典表将字典数据挂载到一张代理的数据表下,从而访问字典中的数据,也可以实现数据表与字典数据的join查询。

二、字典创建

在ClickHouse20版本之前创建外部数据字典需要创建大量的xml文件来实现,在ClickHouse20.1版本之后引入了“Create dictionary”语句创建数据字典,创建字典表举例操作如下:

#创建新的库并使用create database dic_test_db;use dic_test_db;#创建普通MergeTree表,描述地理位置表CREATE TABLE loc_info(uuid String,local_id UInt64,local_name String)engine=MergeTree()order by uuid;#创建 数据字典表CREATE DICTIONARY dic_loc_info(local_id UInt64,local_name String)PRIMARY KEY local_idSOURCE(ClickHouse(	HOST 'node1'	PORT 9000	USER 'default'	TABLE 'loc_info'	PASSWORD ''	DB 'dic_test_db'	))LIFETIME (MIN 1 MAX 10)LAYOUT(HASHED());注意:以上创建字典表的参数解释如下:HOST:指定ClickHouse节点名称PORT:指定ClickHouse端口,默认9000USER:连接ClickHouse用户名PASSWORD:连接ClickHouse用户名对应密码TABLE:此字典表映射的表名,字典表中的列名与映射表中列名一致。DB:字典表映射表所在的库LIFETIME:字典的自动更新频率LAYOUT:字典的类型,决定了数据在内存中以何种结构组织和存储。目前扩展字典共拥有7种类型。#创建普通用户表CREATE TABLE person_info(person_id String,name String,age UInt8,loc_id UInt64)engine=MergeTree()order by person_id;#向表loc_info中插入以下数据:insert into loc_info values ('uuid1',100,'北京'),('uuid2',101,'上海'),('uuid3',102,'广州');#向表 person_info中插入以下数据:insert into person_info values ('1','张三',18,102),('2','李四',19,101),('1','王五',20,100);

标签: #数据字典应该在建立 #数据字典的建立应在 #数据字典建立应从哪个阶段开始