ClickHouse进阶(十一):Clickhouse数据字典-1

news2024/9/22 13:44:43

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!

 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


目录

1. 字典创建

2. 字典查询

2.1 元数据查询

 2.2 数据查询

​​​​​​​3. 字典删除

​​​​​​​4. 分布式字典表


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

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

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

1. 字典创建

在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_id
SOURCE(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端口,默认9000
USER:连接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);

2. 字典查询

2.1 元数据查询

通过system.dictionaries系统表可以查询扩展字典的元数据信息。查询语句如下:

select name,type,key,attribute.names,attribute.types,source from system.dictionaries;

注意:以上查询字段的意义如下:

name:字典的名称,使用字典函数时需要通过字典名称访问数据。

type:字典所属类型。

key:字典的key值,数据通过key值定位。

attribute.names:属性名称,以数组形式保存。

attribute.types:属性类型,以数组形式保存。

source:数据源信息。

 2.2 数据查询

字典数据使用时可以通过字典函数获取,如下:“dictGetString”就是字典函数,查询使用字典如下:

#使用dic查询数据

select person_id,name,age,loc_id,dictGetString('dic_test_db.dic_loc_info','local_name',loc_id) as local_name from person_info;

dictGet('字典名称','获取的值','查询的值(参数)'),如果字典类型是复合型key(参照字典类型complex_key_hashed/complex_key_cache)对应字典类型,在使用dicGet时需要使用元组作为参数,例如:dicGetString('字典名称','获取的值',tuple(col1,col2))。

除了dictGetString外,clickhouse还提供了一系列以dictGet为前缀的字典函数,具体如下:

  • 获取整形数据的函数:

dictGetUInt8,dictGetUInt16,dictGetUInt32,dictGetUInt64,dictGetInt8,dictGetInt16,dictGetInt32,dictGetInt64。

  • 获取浮点数据的函数:

dictGetFloat32,dictGetFloat64

  • 获取日期数据的函数:

dictGetDate,dictGetFloat64

  • 获取字符串数据的函数:

dictGetString,dictGetUUID

我们在使用时,也可以直接使用dictGet(xx)传入对应的参数即可。

​​​​​​​3. 字典删除

删除字典语法如下:

DROP DICTIONARY dic_name;



#将dic_loc_info删除

node1 :) drop dictionary dic_loc_info;

​​​​​​​4. 分布式字典表

字典表也是支持分布式,创建语句如下,在clickhouse中我们可以像创建分布式表一样使用字典表。

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})

使用案例如下:

#在node1节点上创建表 loc_info并插入数据

CREATE TABLE loc_info(

uuid String,

local_id UInt64,

local_name String

)engine=MergeTree()

order by uuid;

insert into loc_info values ('uuid1',100,'北京');



#在node2节点上创建表 loc_info 并插入数据

CREATE TABLE loc_info(

uuid String,

local_id UInt64,

local_name String

)engine=MergeTree()

order by uuid;

insert into loc_info values ('uuid2',101,'上海');



#在node3节点上创建表 loc_info 并插入数据

CREATE TABLE loc_info(

uuid String,

local_id UInt64,

local_name String

)engine=MergeTree()

order by uuid;

insert into loc_info values ('uuid3',102,'广州');



#在clickhoiuse集群中创建分布式字典dic_loc_info

CREATE DICTIONARY dic_loc_info on cluster clickhouse_cluster_3shards_1replicas(

local_id UInt64,

local_name String

)PRIMARY KEY local_id

SOURCE(ClickHouse(

HOST 'localhost' --注意这里写localhost

PORT 9000

USER 'default'

TABLE 'loc_info'

PASSWORD ''

DB 'default'

))

LIFETIME (MIN 1 MAX 10)

LAYOUT(HASHED());



注意:以上在clickhouse集群中创建字典表的本质就是在clickhouse集群每台节点上创建对应的字典表。



#创建分布式字典表

Create table xxx on cluster clickhouse_cluster_3shards_1replicas (

local_id UInt64,

local_name String

)engine = Distributed(ClickHouse_cluster_3shards_1replicas,default,dic_loc_info,local_id);



#在node1,node2,node3任意节点上查看分布式字典表数据

node1 :) select * from xxx;


 👨‍💻如需博文中的资料请私信博主。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肖sir__设计测试用例方法之编写测试用例12

编写测试用例 一、用例模板 案例1: 案例2: 案例3: 二、测试工作重点: 编写测试用例、 执行用例 (依据测试用例) 三、测试流程(h模型) 1、拿到需求 2、编写测试计划(…

vue项目搭建

安装node node官网获取安装包 下载好的安装包,后面重复点击下一步(Next)就行 安装完成后,关闭窗口即可 windows键R键打开小窗口,然后输入cmd打开命令行 node -v检查安装的node版本 npm -v检查安装的npm版本&#…

【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis

1 Java 使用 Redis 1.1 方案简述 redis的java客户端很多,官方推荐的有三种: JedisLettuceRedissonSpring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-b…

高级IO---五种IO模型多路转接之Select

文章目录 五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、多路转接IO5、异步IO总结IO 同步与异步阻塞与非阻塞设置非阻塞利用fcntl接口实现一个设置非阻塞的函数 多路转接之Selectselect函数原型fd_set结构返回值 socket就绪条件读就绪写就绪 select的特点select使用示例Util.…

Flowable 之任务分配

文章目录 一、任务分配和流程变量1.1 任务分配1.1.1 固定分配1.1.2 表达式分配① 值表达式② 方法表达式 1.1.3 监听器分配 1.2 流程变量1.2.1 全局变量1.2.2 局部变量1.2.3 案例讲解 二、候选人和候选人组2.1 候选人2.1.1 部署和启动流程2.1.2 任务的查询2.1.3 任务的拾取2.1.…

FRR+BFD+OSPF与BGP联动

1.拓扑设计 2.拓扑介绍 如图,LY集团 由核心机房与接入层网络组成,集团网络需要通过核心机房访问互联网,集团网络运行OSPF与IBGP协议;集团网络中接入层网络正常经过R2访问互联网,如果R2设备失效后,应立即换到…

Git版本管理

Git版本介绍 Git 是一个分布式版本控制系统,它被广泛用于协作软件开发和管理代码的变更。Git 的设计目标是为了处理速度快、灵活性强、数据完整性好的版本管理需求。以下是 Git 版本管理的详细介绍: 版本控制系统 (VCS): Git 是一种版本控制…

深度ESP32 PWM教程如何在ESP32 中使用PWM

关于ESP32PWM的简要说明 ESP32 SoC 满载了非常有用的外设,PWM 就是其中之一。是的。ESP32 的芯片中有一个专用的 PWM 硬件模块。脉宽调制或简称PWM是一种成熟且广泛使用的供电技术。 您可以使用 ESP32 的 PWM 来驱动 LED、电机(普通直流电机和无刷电机…

Vue2项目练手——通用后台管理项目第六节

Vue2项目练手——通用后台管理项目 用户管理页table表格获取表格数据目录列表user.jsmock.jsindex.jsUsers.vue 新增和编辑功能Users.vue 删除功能使用的组件Users.vue 用户管理页 table表格 使用的组件和前面的表格使用的一致。 获取表格数据 目录列表 user.js import Mo…

基于SpringBoot的在线拍卖系统

基于SpringBootVue的在线拍卖系统,前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 后台:用户管理、商品类型管理…

无需设计经验,也能制作出精美的房地产电子传单

在数字化时代,传统的纸质传单已经不能满足人们对于互动和个性化的需求。为此,许多房地产公司开始将目光转向H5微传单,这是一种通过互联网和手机浏览器来传达信息的创新方式。今天,我们将教你如何使用乔拓云网制作房地产微传单H5&a…

STC单片机+EC11编码器实现调节PWM输出占空比

STC单片机+EC11编码器实现调节PWM输出占空比 📌相关篇《stc单片机外部中断+EC11编码器实现计数功能》 📍《STC15单片机特有的PWM寄存器和普通定时器实现PWM输出》 🎬效果演示: 🌼 通过逻辑分析仪获取P11引脚上的信号波形,查看其对应输出的占空比。 ✨本例程基于上面两…

Laravel 模型的关联写入多对多的关联写入 ⑩③

作者 : SYFStrive 博客首页 : HomePage 📜: THINK PHP 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

vue 页面加水印

首先创建一个waterMark.js文件,当然文件命名可自定义, use strictconst watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container*/ const setWatermark (str, container) > {const id 1.23452384164.123412415…

计算机网络第一章:概述

一.因特网概述 1.1网络、互联网(互连网)和因特网 网络由若干结点和连接这些结点的链路组成,可以是有线链路,也可以是无线链路 互连网:多个网络通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互连网。因此…

spring注解@Component、@controller、@service、@repository

使用之前需要在spring.xml配置文件中配置 只有扫描正确,且应标记注解的类正确标记过后,spring容器才会帮组我们创建并且管理bean对象 Component注解 作用:把普通pojo实例化到spring容器中,相当于之前xml配置文件中的 &#xff…

【数据结构】链表C++编写的,它定义了一个链表,并实现了一些基本的链表操作,如创建新节点、插入节点、清空链表、输出链表以及查找节点

// 引入标准输入输出流库&#xff0c;用于输出操作 #include <iostream> // 引入标准库中的stdlib&#xff0c;包含了rand()函数和其他相关函数 #include <cstdlib> // 引入标准库中的time&#xff0c;包含了time()函数和其他相关函数 #include <ctim…

【Linux】高级IO --- Reactor网络IO设计模式

人其实很难抵制诱惑&#xff0c;人只能远离诱惑&#xff0c;所以千万不要高看自己的定力。 文章目录 一、LT和ET模式1.理解LT和ET的工作原理2.通过代码来观察LT和ET工作模式的不同3.ET模式高效的原因&#xff08;fd必须是非阻塞的&#xff09;4.LT和ET模式使用时的读取方式 二…

正反向代理理解

正向代理&#xff08;Forward Proxy&#xff09;和反向代理&#xff08;Reverse Proxy&#xff09;是两种用于网络通信的代理服务器&#xff0c;它们分别用于不同的场景和目的。 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 正向代理是位于客户端和目标服务器…

球谐函数在环境光照中的使用原理

在三维空间中如何对场景光照进行球谐函数展开 图形学论文解析与复现【Spherical Harmonic Lighting:The Gritty Details】 首先&#xff0c;对场景中某像素点的漫反射光照进行计算。 L ( p , w o ) ∫ Ω L ( w i ) n ⋅ w i d w i L(p,w_o) \int_{\Omega}L(w_i)n\cdot w_i…