华为云GaussDB(for Influx)揭秘第九期:最佳实践之数据直方图

高斯Influx官方博客 发表于 2022/05/27 08:53:38 2022/05/27
【摘要】 面对爆发式增长的时序数据,如何挖掘数据中的潜在价值,在业务运行、商业决策中做出精确指导?GaussDB(for Influx)支持等高与定界直方图两种类型的直方图查询能力,帮助用户快速构建业务的数据分析能力,助力用户商业成功!

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同样提供了直方图的实现,与其它直方图略有不同。InfluxDB 2.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 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

下图分别表示上述查询的各定界直方图:

4. 总结

直方图作为一种经典的统计分析工具,由于其构建简单高效且能有效地描述数据分布特征,因此它的应用场景极其广泛,特别是在分析型数据库中。GaussDB(for Influx)中不仅支持支持了两种类型的直方图查询能力(等高与定界直方图),而且支持了四种数据类型(整数、浮点数、字符串与布尔型),能够帮助用户快速构建业务的数据分析能力,助力用户商业成功。另外,GaussDB(for Influx)还在集群化、冷热分级存储、查询、高可用方面也做了深度优化,能更好地满足时序应用的各种场景。

5. 结束

本文作者:华为 云数据库创新Lab & 华为云时空数据库团队
更多技术文章,关注GaussDB(for Influx)官方博客
https://bbs.huaweicloud.com/community/usersnew/id_1586596796288328
Lab官网https://www.huaweicloud.com/lab/clouddb/home.html
产品首页https://www.huaweicloud.com/product/gaussdbforinflux.html
欢迎加入我们!
云数据库创新Lab(成都、北京)简历投递邮箱:xiangyu9@huawei.com
华为云时空数据库团队(西安、深圳)简历投递邮箱:yujiandong@huawei.com

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。