hll外掛程式支援的資料類型HyperLogLog(hll)可以協助您快速預估PV、UV等業務指標。
前提條件
支援的PolarDB PostgreSQL版(相容Oracle)的版本如下:
Oracle文法相容 2.0(核心小版本2.0.14.1.0及以上)
您可通過如下語句查看PolarDB PostgreSQL版(相容Oracle)的核心小版本號碼:
SHOW polar_version;背景資訊
hll外掛程式支援一種可變長、類似集合的資料類型HyperLogLog(hll),常用於在指定精度下返回近似的distinct值,例如,1280位元組的hll資料類型可以高精度地估計出近百億的distinct值。hll適合互連網廣告分析或其他有類似預估分析計算需求的行業,可以快速預估PV、UV等業務指標。
安裝hll外掛程式
CREATE EXTENSION hll;基礎操作
建立一個含有hll欄位的表,命令如下:
CREATE TABLE agg (id INT PRIMARY KEY, userids hll);將int資料類型轉換為hll_hashval類型,命令如下:
SELECT 1::hll_hashval;返回結果如下:
hll_hashval ------------- 1 (1 row)
基本操作符
hll類型支援如下操作符:
=
!=
<>
||
#
樣本如下:
=
SELECT hll_add_agg(1::hll_hashval) = hll_add_agg(2::hll_hashval);返回結果如下:
?column? ---------- f (1 row)||
SELECT hll_add_agg(1::hll_hashval) || hll_add_agg(2::hll_hashval);返回結果如下:
?column? ------------------------------------------ \x128b7f00000000000000010000000000000002 (1 row)#
SELECT #hll_add_agg(1::hll_hashval);返回結果如下:
?column? ---------- 1 (1 row)
hll_hashval類型支援如下操作符:
=
!=
<>
樣本如下:
=
SELECT 1::hll_hashval = 2::hll_hashval;返回結果如下:
?column? ---------- f (1 row)<>
SELECT 1::hll_hashval <> 2::hll_hashval;返回結果如下:
?column? ---------- t (1 row)
基本函數
支援hll_hash_boolean、hll_hash_smallint和hll_hash_bigint等hash函數,樣本如下:
SELECT hll_hash_boolean(true);返回結果如下:
hll_hash_boolean --------------------- 8849112093580131862 (1 row)SELECT hll_hash_integer(1);返回結果如下:
hll_hash_integer ---------------------- -8604791237420463362 (1 row)
支援hll_add_agg函數,可以將int轉換為hll格式,樣本如下:
SELECT hll_add_agg(1::hll_hashval);返回結果如下:
hll_add_agg -------------------------- \x128b7f0000000000000001 (1 row)支援hll_union函數,可以將hll並集,樣本如下:
SELECT hll_union(hll_add_agg(1::hll_hashval), hll_add_agg(2::hll_hashval));返回結果如下:
hll_union ------------------------------------------ \x128b7f00000000000000010000000000000002 (1 row)支援hll_set_defaults函數,可以設定精度,樣本如下:
SELECT hll_set_defaults(15,5,-1,1);返回結果如下:
hll_set_defaults ------------------ (11,5,-1,1) (1 row)支援hll_print函數,用於列印debug資訊,樣本如下:
SELECT hll_print(hll_add_agg(1::hll_hashval));返回結果如下:
hll_print ----------------------------------------------------------------------------- EXPLICIT, 1 elements, nregs=32768, nbits=5, expthresh=-1(2560), sparseon=1:+ 0: 1 (1 row)
卸載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)