ClickHouse进阶(十二):Clickhouse数据字典-2-字典类型

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

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

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

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

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

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

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


目录

1. flat

 2. hashed

​​​​​​​3. range_hashed

4. cache

5. complex_key_hashed

6. complex_key_cache

7. ip_trie


在创建字典表语句中使用“layout”来指定字典的类型,目前扩展字典支持7种类型,分别为flat、hashed、range_hashed、cache、complex_key_hashed、complex_key_cache、ip_trie,不同的字典类型决定了数据在内存中以何种结构组织和存储。

扩展字典根据使用时传入的条件不同,可以划分为两类:

  • 支持单个数值型条件(条件类型必须是UInt64)

flat、hashed、range_hashed、cache

  • 支持复合条件

complex_key_hashed、complex_key_cache、ip_trie

下面分别介绍以上不同字典类型配置使用。

1. flat

flat字典是所有类型中性能最高的字典类型,只能使用UInt64数值型key。flat字典在内存中使用数组结构保存,默认最多保存50万行数据,如果在创建字典时数据量超出上限,则创建失败。

flat数据字典使用如下:

#创建flat数据字典CREATE DICTIONARY flat_dic_test(local_id UInt64,local_name String)primary key local_idSOURCE(clickhouse(HOST 'node1'PORT 9000USER 'default'TABLE 'loc_info'PASSWORD ''DB 'dic_test_db'))LIFETIME (MIN 1 MAX 10)LAYOUT(FLAT());#使用flat字典表select dictGet('dic_test_db.flat_dic_test','local_name',toUInt64(100)) as local_name;┌─local_name─┐│ 北京       │└────────────┘

 2. hashed

hashed字典同样只能够使用UInt64数值型key,与flat不同的是hashed字典在内存中通过散列结构保存,没有存储上限,案例参照后续部分。

​​​​​​​3. range_hashed

range_hashed字典可以看做hashed字典的变种,在原有功能的基础上增加了指定时间区间的特性,数据会以散列结构存储并按照时间排序。时间区间通过range_min和range_max元素指定,创建range_hashed字典表时必须指定Range时间范围且起始结束字段必须是Date或者DateTime类型。

range_hashed字典表使用案例如下:

#创建普通表 rate表,表中四列代表:用户、开始时间、结束时间、优惠金额create table rate(id UInt64, start Date, end Date, discount Float32) ENGINE=MergeTree() order by id;#向表rate中插入如下数据insert into rate values (111, '2021-11-01', '2021-11-03', 100),(111, '2021-11-04', '2021-11-20', 200),(222, '2021-11-10', '2021-11-12',300);

#创建range_hashed字典表CREATE DICTIONARY hash_range_dic_test (id UInt64,start Date,end Date,discount Float32)PRIMARY KEY idSOURCE(clickhouse(host 'node1'port 9000user 'default'db 'dic_test_db'password ''table 'rate'))LAYOUT(RANGE_HASHED())RANGE(MIN start MAX end)LIFETIME(30);#使用range_dic查询数据select dictGetFloat32('dic_test_db.hash_range_dic_test', 'discount', toUInt64(111), toDate('2021-11-02')) as discount;┌─discount─┐│      100 │└──────────┘select dictGetFloat32('dic_test_db.hash_range_dic_test', 'discount', toUInt64(111), toDate('2021-11-19')) as discount;┌─discount─┐│      200 │└──────────┘select dictGetFloat32('dic_test_db.hash_range_dic_test', 'discount', toUInt64(222), toDate('2021-11-20')) AS discount;┌─discount─┐│        0 │└──────────┘注意:以上我们查询对应数据时,需要多传入一个时间参数,dictGet函数会根据数据找到传入条件所属范围,找到对应的值返回。

4. cache

cache字典只能够使用UInt64数值类型的key,该字典数据在内存中通过固定长度的向量数组保存,定长的向量数组又称cells,在创建cache字典表时需要指定向量数组长度,长度必须是2的整数倍,若不是,会自动向上取2的整数倍的整数。

cache字典用于一些数据不适合长期存放在内存,但是频繁访问的数据需要放在内存的场景。cache字典的取数并不是一次性将所有数据加载到内存中,当从cache字典中获取数据时,首先在cells中查询有没有该数据缓存,没有就会从源头加载数据并缓存到cells中,所以cache性能最不稳定,性能好坏完全取决于缓存的命中率,建议少使用此类型字典。

cache字典表使用案例如下:

#创建cache数据字典CREATE DICTIONARY cache_dic_test(local_id UInt64,local_name String)primary key local_idSOURCE(clickhouse(HOST 'node1'PORT 9000USER 'default'TABLE 'loc_info'PASSWORD ''DB 'dic_test_db'))LIFETIME (MIN 1 MAX 10)LAYOUT(CACHE(SIZE_IN_CELLS 100000));#使用cache字典表select dictGet('dic_test_db.cache_dic_test','local_name',toUInt64(100)) as local_name;┌─local_name─┐│ 北京       │└────────────┘

5. complex_key_hashed

complex_key_hashed字典在功能方面与hashed字典完全相同,只是将当个数值型key替换成了复合型。

complex_key_hashed使用案例如下:

#创建普通表 student_infocreate table student_info(id UInt64,code String,name String,age UInt8)engine=MergeTree()order by id;#向表student_info中插入数据insert into student_info values (1,'001','张三',18),(2,'002','李四',19),(3,'003','王五',20);#创建complex_key_hashed 字典表CREATE DICTIONARY complex_key_hashed_dic_test(id UInt64,code String,name String,age UInt8)PRIMARY KEY id,codeSOURCE(clickhouse(host 'node1'port 9000user 'default'db 'dic_test_db'password ''table 'student_info'))LAYOUT(COMPLEX_KEY_HASHED())LIFETIME(30);#使用complex_key_hashed字典表查询数据SELECT dictGet('dic_test_db.complex_key_hashed_dic_test', 'name', tuple(toUInt64(2), '002')) AS name;┌─name─┐│ 李四 │└──────┘注意:使用complex_key_hashed字典表时传入条件key时,格式为tuple,tuple中到底传入几个参数,需要与创建该字典时指定的primary key顺序一样。

6. complex_key_cache

complex_key_cache字典同样与cache字典的特性完全相同,只是将单个数值型key替换成了复合型。

complex_key_cache使用案例如下:

#创建complex_key_cache字典表CREATE DICTIONARY complex_key_cache_dic_test(id UInt64,code String,name String,age UInt8)PRIMARY KEY id,ageSOURCE(clickhouse(host 'node1'port 9000user 'default'db 'dic_test_db'password ''table 'student_info'))LAYOUT(COMPLEX_KEY_CACHE(SIZE_IN_CELLS 100000))LIFETIME(30);#使用complex_key_cache字典表查询SELECT dictGet('dic_test_db.complex_key_cache_dic_test', 'name', tuple(toUInt64(3), 20)) AS name;┌─name─┐│ 王五 │└──────┘

7. ip_trie

ip_trie为复合型key的字典,但是比较特殊,因为在查询时只能在tuple中指定单个字段,用于指代IP前缀,ip_trie字典的数据在内存中使用trie树结构保存,此字典专门用于IP前缀查询的场景,例如通过IP前缀查询对应的ASN信息。

扩展:ASN(Autonomous System Number)是为每个大型网络分配的编号,该编号全球唯一。通过查询IP地址隶属的ASN编号,可以了解该IP地址隶属的网络运营商,以及大致的地址位置。

ip_trie字典表使用案例如下:

#创建IP信息表create table ip_info(prefix String, asn UInt32, ccode String) ENGINE=TinyLog;#向表ip_info中插入数据insert into ip_info values('192.168.179.1',11223,'NP')('192.168.179.2',11224,'US')('192.168.179.3',11225,'RU')('192.168.179.4',11226,'CN');#创建ip_tire字典表CREATE DICTIONARY ip_tire_dict_test (prefix String,asn UInt32,ccode String)PRIMARY KEY prefixSOURCE(clickhouse(host 'node1'port 9000user 'default'db 'dic_test_db'password ''table 'ip_info'))LAYOUT(IP_TRIE())LIFETIME(30);#使用ip_tire字典表查询数据select dictGetUInt32('dic_test_db.ip_tire_dict_test', 'asn', tuple(IPv4StringToNum('192.168.179.3'))) as asn,dictGet('dic_test_db.ip_tire_dict_test', 'ccode', tuple(IPv4StringToNum('192.168.179.3'))) as ccode;┌───asn─┬─ccode─┐│ 11225 │ RU    │└───────┴───────┘

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


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

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

相关文章

ChatGPT怎么运用在文学分析和文化研究中?

ChatGPT在文学分析和文化研究中具有巨大的潜力。它可以用于解析文学作品、探讨文学理论、分析文化现象以及协助研究者深入理解文学和文化的复杂性。在接下来的1500字中,我将详细回答如何运用ChatGPT在文学分析和文化研究中。 ### 第一部分:文学分析 文…

英码深元“三位一体”AI场景化解决方案,助力多地化工园区快速实现智慧化转型!

我国是世界公认的化工大国,同时也是崛起中的化工强国。近年来多起重大爆炸事故暴露出我国化工园区安全问题突出,特别是在安全风险管控数字化转型、智能化升级方面存在明显短板和不足,尤其突出的痛点:化工园区的日常管理方式较为粗…

SD固定人物角色的方法

文章目录 前言1.固定人物角色1.seed固定2.ControlNet固定3.lora固定角色 前言 本章主要介绍如何用SD绘制漫画 1.固定人物角色 1.seed固定 2.ControlNet固定 3.lora固定角色

电子烟行业常用的英文表达

1. 电子烟的各种表达 a) 电子烟 i. Electronic-cigarette, ii. Electronic smoke, iii. electronic cigarettes iv. Electric cigarette, v. E-Cigarettes vi. e-cigarette, vii. e-Cig viii. E cigar,e-cigar 电子烟雪茄 2. 电子烟特指词汇及衍生 a) VAPE i. Vapo…

【Git】Git 分支

Git 分支 1.分支简介 为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的。 或许你还记得 起步 的内容, Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 。 在进行提交操作时,Git 会保存一…

Scrum工作模式的角色和活动

​Scrum工作模式是一种敏捷软件开发方法,其核心是团队合作和自我组织,旨在通过短周期的迭代开发,实现快速反馈和持续改进。 Scrum工作模式包括以下角色和活动: 1、产品负责人(Product Owner):…

Oracle(1):Oracle简介

1 什么是 ORACLE ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据…

计算机网络篇之端口

计算机网络篇之端口 文章目录 计算机网络篇之端口前言概括分类总结 前言 我们知道ip地址可以确定向哪台主机转发数据,但是数据要发给主机的哪个进程,这个时候端口就派上用场了 概括 计算机网络端口是用于区分不同应用程序或网络服务的逻辑地址&#x…

ICC2: ICG clone与ICG merge

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 默认情况下,initial_place阶段或者在spg flow的initial_opt阶段工具会自动merge clock gating cell。但是如果在place_opt之前使用merge_clock_gates命令了,place阶段就不会再merge clock gate了。…

maven管理android项目

maven管理android项目 1.安装maven-android-sdk-deployer,下载地址:https://github.com/mosabua/maven-android-sdk-deployer 2.解压缩大英文路径文件夹 3.在压缩后的根目录执行mvn clean install -P 2.3.3(2.3.3指的是android版本号&#x…

赋能人工智能:Kubeflow VMware Distribution的发布

在最近结束的 VMware Explore 2023 拉斯维加斯大会上,VMware 推出了新的 Private AI 产品,以促进企业采用生成式人工智能并挖掘可信数据的价值。VMware 宣布了以下几点: 与 NVIDIA 合作推出 VMware Private AI Foundation,将两家…

安装 paddlepaddle paddleocr库,避坑指南

看到这个库我就头疼,因为换了电脑,不得不再来一遍,又是到处踩坑!拼了好几个小时,总结出来的最终解决方法!详细的傻瓜式解决! - import paddle 报错!illegal hardware instruction py…

Linux 内核 6.5 发布,首次支持 Wi-Fi 7 和 USB4

导读Linux 6.5 内核 已经推出,此次更新在 Linux 6.4 内核的基础上进行了进一步的开发,带来了值得注意的改变和新特性。 Linus Torvalds 表示,这是一次相对顺畅的发布: 上周并没有发生任何异常或惊人的事情,因此没有理…

数据预处理之数据缩放

一、介绍 ​ 在实践中,同一个数据集合中经常包含不同类别的变量。一个很大的问题是这些变量的值域可能大不相同。如果使用原值域将会使得值域大的变量被赋予更多的权重。针对这个问题,我们需要在数据预处理时对自变量或特征使用缩放的方法。特征缩放的目…

【运维 Pro】时序场景实践与原理 - 1. 分布与分区

【运维 Pro】: 是由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识,我们更希望能够通过介绍这些知识背后的原理,让大家和我们一起感知数据库的美妙。 摘要 有别于其它场景,时序场景中的数据、查询都有着更为明显的…

Scrum敏捷开发流程及敏捷研发关键环节

Scrum是一个迭代式增量软件开发过程,是敏捷方法论中的重要框架之一。它通常用于敏捷软件开发,包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管(Scrum Master)、产品负责人(Product Owner&…

php+mysql实现补齐24小时时间段同时赋值0的后端解决方案

javascript对象数据合并实现补齐24小时时间段同时赋值0的解决方案(1)javascript对象数据合并实现补齐24小时时间段同时赋值0升级版解决方案(2) 项目需求 在php中使用mysql生成 arr [{"dataKey": "00","totalTrans": "4","tot…

坚果投影人事地震:IPO之前,创始人被投资人踢出公司

大数据产业创新服务媒体 ——聚焦数据 改变商业 一份流传于网络的《董事会函件》以及一张微信截图显示,智能投影行业市占率第二的坚果投影8月28日发生人事地震,公司创始人胡震宇被董事会罢免董事长一职,由资方代表连萌担任临时董事长一职。 …

ip地址会随网络变化而变化吗

随着科技的飞速发展,互联网已深入我们生活的方方面面。在这庞大的网络世界中,IP地址作为网络通信的基础元素,引起了广泛关注。网络变化与IP地址之间存在着密切的关系。那么,IP地址是否会随着网络变化而变化呢?虎观代理…

企业架构LNMP学习笔记21

URL重写: ngx_http_rewrite_module 模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置。 return 该指令用于结束结束规则的执行并返回状态码给客户端。 403 Forbidden.服务器已经理解请求,但是拒绝执行它 404 Not…