龙空技术网

揭秘华为云GaussDB(for Influx):数据直方图

华为云开发者联盟 153

前言:

目前朋友们对“直方图在表示数据方面有什么特点”大约比较注重,我们都需要剖析一些“直方图在表示数据方面有什么特点”的相关资讯。那么小编在网上网罗了一些关于“直方图在表示数据方面有什么特点””的相关资讯,希望朋友们能喜欢,同学们一起来学习一下吧!

本文分享自华为云社区《华为云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    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在各区间的统计值。

查询示例

查询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博客_云计算博客_开发者中心-华为云

标签: #直方图在表示数据方面有什么特点