前言:
目前朋友们对“直方图在表示数据方面有什么特点”大约比较注重,我们都需要剖析一些“直方图在表示数据方面有什么特点”的相关资讯。那么小编在网上网罗了一些关于“直方图在表示数据方面有什么特点””的相关资讯,希望朋友们能喜欢,同学们一起来学习一下吧!本文分享自华为云社区《华为云GaussDB(for Influx)揭秘第九期:最佳实践之数据直方图-云社区-华为云》,作者: GaussDB 数据库 。
1. 背景
随着5G和IOT的快速发展,面对爆发式增长的时序数据,如何才能挖掘数据中的潜在价值,为客户的业务运行、商业决策提供精确的指导?在统计学中,直方图作为一种经典的分析工具,可以直观地描述数据分布特征,应用场景极其广泛,例如:
在网络监控数据方面,通过直方图可以捕捉异常数据的分布区间,便于网络的自诊断与修复;在时序数据分析方面,通过直方图可以表示数据的分布特征,便于时序数据的特征提取;作为代价评估模型的输入从而指导数据库内部的查询优化;
本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法。
2. 直方图的实现方式
时序及分析性数据库大部分都支持了直方图算子,但各个数据库中的直方图实现上也有一定差异,其中几种比较典型的直方图实现有:
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)支持两种直方图类型查询,一种确定桶数的等高直方图,另一种确定桶边界的定界直方图。等高直方图指每个桶的高度接近的直方图,而定界直方图指设定桶的上下边界值的直方图。定界直方图支持用户的自定义,更方便用户根据业务特点提取数据的关键分布特征。支持四种数据类型,包括整数、浮点数、字符串与布尔类型,可满足各行各业的数据分析需求。
3. GaussDB(for Influx)直方图使用
本章节通过实际的数据样例介绍GaussDB(for Influx)直方图的使用。
3.1 数据样例
示例采用的数据如下:mst是表名,包含4个field(每个field对应一种数据类型)与2个tag,元数据如下:
> show field keysname: mstfieldKey fieldType-------- ---------address stringage integeralive booleanheight float> show tag keysname: msttagKey------countryname
原始数据如下:
> select * from mstname: msttime address age alive country height name---- ------- --- ----- ------- ------ ----1629129600000000000 shenzhen 12 true china 70 azhu1629129601000000000 shanghai 20 false american 80 alan1629129602000000000 beijin 3 true germany 90 alang1629129603000000000 guangzhou 30 false japan 121 ahui1629129604000000000 chengdu 35 true ca** 138 aqiu1629129605000000000 wuhan 48 china 149 agang1629129606000000000 52 true american 153 agan1629129607000000000 anhui 28 false germany alin1629129608000000000 xian true japan 179 ali1629129609000000000 hangzhou 60 false ca** 180 1629129610000000000 nanjin 102 true 191 ahuang1629129611000000000 zhengzhou 123 false china 203 ayin3.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在各区间的统计值。
查询示例
查询field_key为age且桶数为5的等高直方图。
> select histogram(age, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000name: msttime histogram value---- --------- -----0 20 30 30 20 48 20 60 20 9223372036854775807 2查询field_key满足正则匹配为/hei/(符合要求的只有height)且桶数为5的等高直方图。
# 浮点数类型> select histogram(/hei/, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000name: msttime histogram_height value---- ---------------- -----0 90 30 138 20 153 20 180 20 1.7976931348623157e+308 2支持field为字符串类型的address与布尔类型的alive的等高直方图查询。
> select histogram(address, 5) from mst where time >= 1629129600000000000 and time <= 1629129611000000000name: msttime histogram value---- --------- -----1629129600000000000 chengdu 31629129600000000000 hangzhou 21629129600000000000 shanghai 21629129600000000000 wuhan 21629129600000000000 zhengzhou 2> select histogram(alive, 3) from mst where time >= 1629129600000000000 and time <= 1629129611000000000name: msttime histogram value---- --------- -----1629129600000000000 false 51629129600000000000 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指定区间的统计值。
查询示例:
查询field_key为age且指定区间[0, 10), [10, 20), [20, 30), [30, 40), [40, 50)的定界直方图。
# 整数类型> select histogram(age, 'specifyBins', 10,20,30,40,50) from mstname: msttime histogram value---- --------- -----0 10 10 20 20 30 20 40 10 50 1查询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 mstname: msttime histogram value---- --------- -----0 160 70 170 00 180 20 190 00 200 1支持field为字符串类型的address与布尔类型的alive的定界直方图查询。
# 字符串类型> select histogram(address, 'specifyBins', 'anhui', 'beijin', 'chengdu') from mstname: msttime histogram value---- --------- -----0 anhui 10 beijin 10 chengdu 1# 布尔类型> select histogram(alive, 'specifyBins', false, true) from mstname: msttime histogram value---- --------- -----0 false 50 true 6
下图分别表示上述查询的各定界直方图。
总结
直方图作为一种经典的统计分析工具,由于其构建简单高效且能有效地描述数据分布特征,因此它的应用场景极其广泛,特别是在分析型数据库中。GaussDB(for Influx)中不仅支持了两种类型的直方图查询能力(等高与定界直方图),而且支持了四种数据类型(整数、浮点数、字符串与布尔型),能够帮助用户快速构建业务的数据分析能力,助力用户商业成功。
另外,GaussDB(for Influx)还在集群化、冷热分级存储、查询、高可用方面也做了深度优化,能更好地满足时序应用的各种场景。
点击下方,第一时间了解华为云新鲜技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
标签: #直方图在表示数据方面有什么特点