写点什么

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

  • 2022 年 5 月 18 日
  • 本文字数:3930 字

    阅读完需:约 13 分钟

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


查询示例


1. 查询 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
复制代码

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
复制代码

3. 支持 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 指定区间的统计值。


查询示例:

1. 查询 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
复制代码

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 mstname: msttime histogram value---- --------- -----0    160       70    170       00    180       20    190       00    200       1
复制代码

3. 支持 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)还在集群化、冷热分级存储、查询、高可用方面也做了深度优化,能更好地满足时序应用的各种场景。

结束

本文作者:华为云数据库创新 Lab & 华为云时空数据库团队 欢迎加入我们!

云数据库创新 Lab(成都、北京)简历投递邮箱:xiangyu9@huawei.com

华为云时空数据库团队(西安、深圳)简历投递邮箱:yujiandong@huawei.com


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
揭秘华为云GaussDB(for Influx):数据直方图_数据库_华为云开发者社区_InfoQ写作社区