GBase 8a 统计信息表说明

gbase8a的统计信息有两张表,分别是gclusterdb.gc_stats_table和gclusterdb.gc_stats_column;

1、gc_stats_table表里存储analyze表的数据条数;

gbase> select * from gc_stats_table where db=’tpch1t’;

+——–+————+————+———————+

| db     | table_name | tuples     | timestamp           |

+——–+————+————+———————+

| tpch1t | lineitem   | 5999989709 | 2023-12-29 11:37:05 |

| tpch1t | orders     | 1500000000 | 2023-12-29 11:47:35 |

| tpch1t | part       |  200000000 | 2023-12-29 11:49:58 |

| tpch1t | partsupp   |  800000000 | 2023-12-29 11:50:28 |

| tpch1t | supplier   |   10000000 | 2023-12-29 11:50:54 |

| tpch1t | customer   |  150000000 | 2023-12-29 11:51:04 |

| tpch1t | nation     |         25 | 2023-12-29 11:51:40 |

| tpch1t | region     |          5 | 2023-12-29 11:51:42 |

+——–+————+————+———————+

2、gclusterdb.gc_stats_column中存储的是列的相关信息

gbase> desc gclusterdb.gc_stats_column;

+————-+—————-+——+—–+———+——-+

| Field       | Type           | Null | Key | Default | Extra |

+————-+—————-+——+—–+———+——-+

| db          | varchar(64)    | YES  |     | NULL    |       |

| table_name  | varchar(64)    | YES  |     | NULL    |       |

| column_name | varchar(64)    | YES  |     | NULL    |       |

| null_frac   | float          | YES  |     | NULL    |       |

| avg_width   | int(11)        | YES  |     | NULL    |       |

| n_distinct  | float          | YES  |     | NULL    |       |

| mcv_vals    | varchar(10922) | YES  |     | NULL    |       |

| mcv_freqs   | varchar(10922) | YES  |     | NULL    |       |

| histogram   | varchar(10922) | YES  |     | NULL    |       |

+————-+—————-+——+—–+———+——-+

 

gclusterdb.gc_stats_column列的说明

(1)null_frac:统计列是空值的比例;计算方法:列是空的条数/采样条数

(2)avg_width:列的平均宽度:只统计变长的数据类型(比如varchar)

计算方法:select avg(length(c1)) from table

(3)n_distinct:统计列的distinct值,如果值是正数,则显示的是count(distinct),如果是负数,则显示的是distinct值所占比例(比例大于10%时,用负数显示,否则显示正数)

计算方法:select count(distinct(c1)) as n_distinct from table;或

select count(distinct(c1))/count(*) as n_distinct from table;

(4)mcv_vals:列中出现次数较多的值,值的个数由gcluster_statistics_target决定,默认25个。

计算方法:Select v,count(col)/count(*) from table group by v order by count(*) desc limit 25;

(5)mcv_freqs:为(4)计算出的count(col)/count(*)

(6)Histogram:各个区间中count数相同,只有数值类型需要统计直方图,varchar类型不统计,区间个数也由gcluster_statistics_target决定。{1,3,8,20},可以划分的区间是(1,3),(8,20),即这两个区间的值个数相同。

计算方法:(1)先算出每个区间有多少个值,bucket_size=count(*)/gcluster_statistics_target

(2)select v from (select col v,row_number() over(order by col) r from table where col is not null union select max(col),1 as r from table where col is not null) foo where r%(bucket_size)=1 group by v order by v

row_number() over(order by col)全表升序排列

r%(bucket_size)=1 找到区间的边界值,左闭右开区间

统计的结果是区间的边界值,[1,100,300,400]表示1,100和100,300区间的频数相同

3、关于统计信息的参数:

gcluster_statistics_sampling_threshold:含义:如果表的记录数小于阈值,则全量采样,否则随机抽取部分数据

gcluster_statistics_target:用于计算采样的数据量,决定mcv的统计个数和直方图区间的个数,一般使用默认值

gcluster_analyze_relative_error:统计分析的相对误差率

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/317886.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

登录后才能评论