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,一经查实,立即删除!

相关文章

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

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

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

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 数据…

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&…

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

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

企业架构LNMP学习笔记21

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

Nginx反向代理联动Tomcat实现多实例部署、动静分离、负载均衡

文章目录 1. 配置反向代理1.1 前置准备1.2 代理服务器配置1.3 真实服务器配置1.4 客户机配置 2. Tomcat 多实例部署2.1 部署JDK2.2 设置JDK环境变量2.3 部署Tomcat服务2.4 路径启动 3. Nginx联动Tomcat实现动静分离、负载均衡3.1 基本原理3.2 前置准备3.3 配置nginx1实现四层代…

HCS 中的一些概念(二)

一、Service OM 1、首页(资源状态) 2、服务列表 计算资源:计算资源又分为可用分区(AZ)、规格和虚拟机组,可在此处创建虚拟机、虚拟机组、主机组和规格 网络资源:网络资源又分为物理网络…

分享一下微信小程序开发步骤是什么

微信小程序开发步骤是开发微信小程序所需要遵循的一系列步骤。以下是微信小程序开发的步骤: 一、注册开发者账号 首先,需要注册一个微信开发者账号。可以在微信公众平台上注册并选择“小程序”开发者类型。在注册过程中,需要提供一些必要的信…

Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案(三种)

新换的电脑,系统装的win11,node也是18的版本。 跑了一下老项目,我用的是HbuilderX,点击运行和发行时,都会报错: Error: error:0308010C:digital envelope routines::unsupported 出现这个错误是因为 node.j…

掌握信息利器,快速发现潜在商机——介绍一款高效的数据检索软件

掌握信息利器,快速发现潜在商机——介绍一款高效的数据检索软件 在当今信息爆炸的时代,获取准确、实时的信息变得至关重要。为了帮助您快速发现潜在商机,我们推出了一款功能强大的数据检索软件。无论您是市场调研人员、销售专员还是企业经营者…