hll
更新時(shí)間:
hll插件支持的數(shù)據(jù)類型HyperLogLog(hll)可以幫助您快速預(yù)估PV、UV等業(yè)務(wù)指標(biāo)。
背景信息
hll插件支持一種可變長、類似集合的數(shù)據(jù)類型HyperLogLog(hll),常用于在指定精度下返回近似的distinct值,例如,1280字節(jié)的hll數(shù)據(jù)類型可以高精度地估計(jì)出近百億的distinct值。hll適合互聯(lián)網(wǎng)廣告分析或其他有類似預(yù)估分析計(jì)算需求的行業(yè),可以快速預(yù)估PV、UV等業(yè)務(wù)指標(biāo)。
創(chuàng)建hll插件
CREATE EXTENSION hll;
基礎(chǔ)操作
創(chuàng)建一個(gè)含有hll字段的表,命令如下:
CREATE TABLE agg (id INT PRIMARY KEY, userids hll);
將int數(shù)據(jù)類型轉(zhuǎn)換為hll_hashval類型,命令如下:
SELECT 1::hll_hashval;
基本操作符
hll類型支持如下操作符:
=
!=
<>
||
#
示例如下:
SELECT hll_add_agg(1::hll_hashval) = hll_add_agg(2::hll_hashval); SELECT hll_add_agg(1::hll_hashval) || hll_add_agg(2::hll_hashval); SELECT #hll_add_agg(1::hll_hashval);
hll_hashval類型支持如下操作符:
=
!=
<>
示例如下:
SELECT 1::hll_hashval = 2::hll_hashval; SELECT 1::hll_hashval <> 2::hll_hashval;
基本函數(shù)
支持hll_hash_boolean、hll_hash_smallint和hll_hash_bigint等hash函數(shù),示例如下:
SELECT hll_hash_boolean(true); SELECT hll_hash_integer(1);
支持hll_add_agg函數(shù),可以將int轉(zhuǎn)換為hll格式,示例如下:
SELECT hll_add_agg(1::hll_hashval);
支持hll_union函數(shù),可以將hll并集,示例如下:
SELECT hll_union(hll_add_agg(1::hll_hashval), hll_add_agg(2::hll_hashval));
支持hll_set_defaults函數(shù),可以設(shè)置精度,示例如下:
SELECT hll_set_defaults(15,5,-1,1);
支持hll_print函數(shù),用于打印debug信息,示例如下:
SELECT hll_print(hll_add_agg(1::hll_hashval));
刪除hll插件
DROP EXTENSION hll;
示例
CREATE TABLE access_date (acc_date DATE UNIQUE, userids hll);
INSERT INTO access_date
SELECT current_date, hll_add_agg(hll_hash_integer(user_id))
FROM generate_series(1,10000) t(user_id);
INSERT INTO access_date
SELECT current_date-1, hll_add_agg(hll_hash_integer(user_id))
FROM generate_series(5000,20000) t(user_id);
INSERT INTO access_date
SELECT current_date-2, hll_add_agg(hll_hash_integer(user_id))
FROM generate_series(9000,40000) t(user_id);
SELECT #userids FROM access_date WHERE acc_date=current_date;
?column?
------------------
9725.852733707077
(1 row)
SELECT #userids FROM access_date WHERE acc_date=current_date-1;
?column?
------------------
14968.65968832792
(1 row)
SELECT #userids FROM access_date WHERE acc_date=current_date-2;
?column?
------------------
29361.520914991113
(1 row)
文檔內(nèi)容是否對(duì)您有幫助?