揭秘华为云GaussDB(for Influx):数据直方图
摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法。
本文分享自华为云社区《华为云GaussDB(for Influx)揭秘第九期:最佳实践之数据直方图》,作者: GaussDB 数据库 。
背景
随着5G和IOT的快速发展,面对爆发式增长的时序数据,如何才能挖掘数据中的潜在价值,为客户的业务运行、商业决策提供精确的指导?在统计学中,直方图作为一种经典的分析工具,可以直观地描述数据分布特征,应用场景极其广泛,例如:
- 在网络监控数据方面,通过直方图可以捕捉异常数据的分布区间,便于网络的自诊断与修复;
- 在时序数据分析方面,通过直方图可以表示数据的分布特征,便于时序数据的特征提取;
- 作为代价评估模型的输入从而指导数据库内部的查询优化;
本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法。
直方图的实现方式
时序及分析性数据库大部分都支持了直方图算子,但各个数据库中的直方图实现上也有一定差异,其中几种比较典型的直方图实现有:
Druid:Druid-histogram拓展中提供了近似直方图(approximate histogram aggregator)和固定桶直方图(fixed buckets histogram)聚合器。其中近似直方图根据论文《A Streaming Parallel Decision Tree Algorithm》实现,较适用于随机分布的数据。
ClickHouse:ClickHouse提供了自适应直方图,查询的结果为近似值。与Druid类似,其实现参考了论文《A Streaming Parallel Decision Tree Algorithm》。当新数据输入到直方图时,直方图中桶的边界会被调整,通常情况下,桶的宽度并不相等。
ElasticSearch:ElasticSearch中支持了HDR Histogram(High Dynamic Range Histogram),HDR Histogram是一种替代实现,在计算网络延迟的百分位数表现良好。同时,当值的范围并不清楚时,官方并不建议使用HDR Histogram,因为此时内存占用会很高。
InfluxDB v2.0:InfluxDB同样提供了直方图的实现,与其它直方图略有不同。InfluxDB2.0可以设置直方图的桶的生成方式,linearBins()可以将数据按照线性分割,即桶宽相等,logarithmicBins()则可以将数据按照指数分割,即桶宽呈指数形式增长。
GaussDB(for Influx):GaussDB(for Influx)支持两种直方图类型查询,一种确定桶数的等高直方图,另一种确定桶边界的定界直方图。等高直方图指每个桶的高度接近的直方图,而定界直方图指设定桶的上下边界值的直方图。定界直方图支持用户的自定义,更方便用户根据业务特点提取数据的关键分布特征。支持四种数据类型,包括整数、浮点数、字符串与布尔类型,可满足各行各业的数据分析需求。
GaussDB(for Influx)直方图使用
本章节通过实际的数据样例介绍GaussDB(for Influx)直方图的使用。
3.1 数据样例
示例采用的数据如下:mst是表名,包含4个field(每个field对应一种数据类型)与2个tag,元数据如下:
> show field keys
name: mst
fieldKey fieldType
-------- ---------
address string
age integer
alive boolean
height float > show tag keys
name: mst
tagKey
------
country
name
原始数据如下:
> select * from mst
name: mst
time address age alive country height name
---- ------- --- ----- ------- ------ ----
1629129600000000000 shenzhen 12 true china 70 azhu
1629129601000000000 shanghai 20 false american 80 alan
1629129602000000000 beijin 3 true germany 90 alang
1629129603000000000 guangzhou 30 false japan 121 ahui
1629129604000000000 chengdu 35 true canada 138 aqiu
1629129605000000000 wuhan 48 china 149 agang
1629129606000000000 52 true american 153 agan
1629129607000000000 anhui 28 false germany alin
1629129608000000000 xian true japan 179 ali
1629129609000000000 hangzhou 60 false canada 180
1629129610000000000 nanjin 102 true 191 ahuang
1629129611000000000 zhengzhou 123 false china 203 ayin
3.2 等高直方图
查询语法:
SELECT HISTOGRAM( [ * | <field_key> | /<regular_expression>/ ] , <N> ) [WINTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
HISTOGRAM(field_key, N)计算指定指标field在各区间的统计值,其中N是要求的。
HISTOGRAM(/regular_expression/, N)计算满足正则匹配的field在各区间的统计值。
HISTOGRAM(*, N)计算整数与浮点数数据类型的field在各区间的统计值。
查询示例
1、查询field_key为age且桶数为5的等高直方图。
> select histogram(age, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000
name: mst
time histogram value
---- --------- -----
0 20 3
0 30 2
0 48 2
0 60 2
0 9223372036854775807 2
2、查询field_key满足正则匹配为/hei/(符合要求的只有height)且桶数为5的等高直方图。
# 浮点数类型
> select histogram(/hei/, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000
name: mst
time histogram_height value
---- ---------------- -----
0 90 3
0 138 2
0 153 2
0 180 2
0 1.7976931348623157e+308 2
3、支持field为字符串类型的address与布尔类型的alive的等高直方图查询。
> select histogram(address, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000
name: mst
time histogram value
---- --------- -----
1629129600000000000 chengdu 3
1629129600000000000 hangzhou 2
1629129600000000000 shanghai 2
1629129600000000000 wuhan 2
1629129600000000000 zhengzhou 2 > select histogram(alive, 3) from mst where time >= 1629129600000000000 and time <= 1629129611000000000
name: mst
time histogram value
---- --------- -----
1629129600000000000 false 5
1629129600000000000 true 6
下图分别表示上述查询的各等高直方图

3.3 定界直方图
查询语法:
SELECT HISTOGRAM( [ * | <field_key> | /<regular_expression>/ ] , ‘specifyBins’, boundary1, boundary2,...,boundaryN) [WINTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
HISTOGRAM(field_key, ‘specifyBins’, boundary1, boundary2,...,boundaryN)计算指定指标field在指定区间的统计值,specifyBins为定界直方图标志,boundaryN表示指定的各边界值,可以是整数、浮点数、字符串与布尔四种数据类型。
HISTOGRAM(/regular_expression/, ‘specifyBins’, boundary1, boundary2,...,boundaryN)计算满足正则匹配的field在指定区间的统计值。
HISTOGRAM(*, ‘specifyBins’, boundary1, boundary2,...,boundaryN)计算整数与浮点数数据类型的field指定区间的统计值。
查询示例:
1、查询field_key为age且指定区间[0, 10), [10, 20), [20, 30), [30, 40), [40, 50)的定界直方图。
# 整数类型
> select histogram(age, 'specifyBins', 10,20,30,40,50) from mst
name: mst
time histogram value
---- --------- -----
0 10 1
0 20 2
0 30 2
0 40 1
0 50 1
2、查询field_key满足正则匹配为/eight/(符合要求的只有height)且指定区间[0, 160), [160, 170), [170, 180), [180, 190), [190, 200)的定界直方图。
# 浮点数类型
> select histogram(/eight/, 'specifyBins', 160.0, 170.0, 180.0, 190.0, 200.0) from mst
name: mst
time histogram value
---- --------- -----
0 160 7
0 170 0
0 180 2
0 190 0
0 200 1
3、支持field为字符串类型的address与布尔类型的alive的定界直方图查询。
# 字符串类型
> select histogram(address, 'specifyBins', 'anhui', 'beijin', 'chengdu') from mst
name: mst
time histogram value
---- --------- -----
0 anhui 1
0 beijin 1
0 chengdu 1 # 布尔类型
> select histogram(alive, 'specifyBins', false, true) from mst
name: mst
time histogram value
---- --------- -----
0 false 5
0 true 6
下图分别表示上述查询的各定界直方图。

总结
直方图作为一种经典的统计分析工具,由于其构建简单高效且能有效地描述数据分布特征,因此它的应用场景极其广泛,特别是在分析型数据库中。GaussDB(for Influx)中不仅支持了两种类型的直方图查询能力(等高与定界直方图),而且支持了四种数据类型(整数、浮点数、字符串与布尔型),能够帮助用户快速构建业务的数据分析能力,助力用户商业成功。
另外,GaussDB(for Influx)还在集群化、冷热分级存储、查询、高可用方面也做了深度优化,能更好地满足时序应用的各种场景。
结束
本文作者:华为云数据库创新Lab & 华为云时空数据库团队 欢迎加入我们!
云数据库创新Lab(成都、北京)简历投递邮箱:xiangyu9@huawei.com
华为云时空数据库团队(西安、深圳)简历投递邮箱:yujiandong@huawei.com
揭秘华为云GaussDB(for Influx):数据直方图的更多相关文章
- 揭秘华为云GaussDB(for Influx)最佳实践:hint查询
摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...
- 升级的华为云“GaussDB”还能战否?
摘要:芯片.操作系统.数据库是现代信息技术领域的三大核心基础,做数据库,不仅需要技术和投入,对华为这种做通讯起家的企业,更需要的是一种并非玩票性质的态度. GaussDB,不仅蕴含着华为对数学和科学的 ...
- “3+3”看华为云FusionInsight如何引领“数据新基建”持续发展
摘要:一个统一的现代化的数据基建需要三类架构来实践三种不同的应用场景. 近期,美国知名科技企业风投机构A16Z总结出一套通用的技术架构服务,分为以下三种场景. 一.数据基建架构全景 数据流向显示,左侧 ...
- 华为云GaussDB(DWS)内存知识点,你知道吗?
前言 在日常数据库的使用中,难免会遇到一些内存问题.此次博文主要向大家分享一些华为云数仓GaussDB(DWS)内存的基本框架以及基本视图的使用,以便遇到内存问题后可以有一个基本的判断. 注意,本篇博 ...
- 揭秘阿里云EB级大数据计算引擎MaxCompute
日前,全球权威咨询与服务机构Forrester发布了<The Forrester WaveTM: Cloud Data Warehouse, Q4 2018>报告.这是Forrester ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致
摘要:在KV数据库领域,"强一致性"不仅是一个技术名词,它更是业务与运维的重要需求. 清明刚过,五一假期就要来了.大好春光,不如去婺源看油菜花吧!小云迅速打开APP刷出余票2张,赶 ...
- 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...
- 华为云ROMA,联接企业应用的现在与未来
2019.9.19日,在华为全联接大会的华为云Summit中,华为云CTO宇昕总提出:"企业的应用与数据集成,始终是数字化转型和智能化升级的关键,华为云企业应用与数据集成平台ROMA,打破时 ...
- 华为云WeLink 颠覆你对智能办公的想象
导读 华为云发现,与企业数字化关系最紧密的就是办公数字化,所以将WeLink放到华为云上可以作为一个抓手让企业更直观地感受到云端数字化,而且华为云的合作伙伴,也可以与WeLink建立联接,从而进整个企 ...
随机推荐
- 阿里低代码引擎 | LowCodeEngine - 如何配置并调用请求
首发于 语雀文档@blueju 前言 发送请求是前端中很重要也很常见的一部分,阿里低代码引擎自然也不会缺少这一块.在阿里低代码引擎中,请求是在数据源中配置,数据源位置如下图: 配置 配置界面如下图:其 ...
- 编译器如何处理C++不同类中同名函数(参数类型个数都相同)
转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: 一.不类中的特征标相同的同名函数,它们是不同的函数,原因就 ...
- C语言类型转换原理
C语言类型转换 int a; a=1.23 这里把1.23赋值给a发生了隐式转换,原理如下: int a; float b=3.14; a=b; b赋值给a的过程:首先找一个中间变量是a的类型(该例中 ...
- Content Security Policy减少劫持
Content Security Policy减少劫持 什么是CSP? CSP是由单词 Content Security Policy 的首单词组成,是HTML5带给我们的一套全新主动防御的体系,旨在 ...
- onActivityResult执行两次问题
差点被坑死 记一次onActivityResult被调用两次的坑
- java中匿名内部类的匿名构造函数是怎么用的
java中匿名内部类的匿名构造函数是怎么用的下面的例子说明匿名内部类的匿名构造函数的用法 例2.7.2_0interface FigureMark_to_win { void whoAmI(); ...
- echarts中boundaryGap属性
boundaryGap:false boundaryGap:true 代码处: xAxis: { type: "category", data: ["06-01" ...
- nodejs教程---基于expressJs框架,实现文件上传(upload)?
文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...
- 攻防世界——gif
分析 只有黑白两种颜色,大小均一样.考虑代表着二进制. python脚本 ''' 同样颜色的图片的二进制数据都相同 编写思路:取二进制 -> 转ascii码 ''' white = open(r ...
- json在前后台传递的形式
json对象和json字符串的区别纠结了好久一阵子,经过查阅大量博客资料总结得,字符串形式它就是带单引号或者双引号的,对象就是没有被引号包括,可以直接进行调用属性.前后端间数据传递json形式应该是字 ...