揭秘華為雲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(成都、北京)簡歷投遞郵箱:[email protected]

華為雲時空資料庫團隊(西安、深圳)簡歷投遞郵箱:[email protected]

 

點擊關注,第一時間了解華為雲新鮮技術~