Topik ini menjelaskan cara menggunakan ekstensi hll untuk memperkirakan jumlah tampilan halaman (PV) dan pengunjung unik (UV), serta tipe data HyperLogLog yang didukung oleh ekstensi tersebut.
Prasyarat
Instansi RDS menjalankan PostgreSQL 11 atau versi yang lebih baru.
CatatanEkstensi ini tidak didukung oleh instansi ApsaraDB RDS for PostgreSQL yang menjalankan PostgreSQL 17.
Perbarui versi mesin minor dari instansi RDS jika versi mesin utama memenuhi persyaratan tetapi ekstensi masih belum didukung. Untuk informasi lebih lanjut, lihat Perbarui Versi Mesin Minor.
Informasi latar belakang
Ekstensi hll mendukung tipe data HyperLogLog (hll) yang dapat diperluas dan menyerupai set untuk memperkirakan elemen DISTINCT dengan akurasi tertentu. Sebagai contoh, Anda dapat menggunakan 1.280 byte data hll untuk secara akurat memperkirakan miliaran elemen DISTINCT. Ekstensi hll cocok untuk industri yang membutuhkan analisis estimasi, seperti analisis iklan internet untuk memperkirakan PV dan UV.
Untuk informasi lebih lanjut tentang cara menggunakan ekstensi hll, kunjungi postgresql-hll.
Untuk informasi lebih lanjut tentang algoritma terperinci, kunjungi HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm.
Buat ekstensi hll
Setelah terhubung ke sebuah instansi, jalankan pernyataan berikut untuk membuat ekstensi hll:
CREATE EXTENSION hll;Operasi dasar
Jalankan pernyataan berikut untuk membuat tabel yang berisi bidang hll:
create table agg (id int primary key,userids hll);Jalankan pernyataan berikut untuk mengonversi data INT menjadi data hll_hashval:
select 1::hll_hashval;
Operator dasar
Tipe data hll mendukung operator berikut:
=
!=
<>
||
#
Contoh:
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);Tipe data hll_hashval mendukung operator berikut:
=
!=
<>
Contoh:
select 1::hll_hashval = 2::hll_hashval; select 1::hll_hashval <> 2::hll_hashval;
Fungsi dasar
Ekstensi hll mendukung fungsi hash seperti hll_hash_boolean, hll_hash_smallint, dan hll_hash_bigint. Contoh:
select hll_hash_boolean(true); select hll_hash_integer(1);Ekstensi hll mendukung fungsi hll_add_agg untuk mengonversi tipe data dari INT ke hll. Contoh:
select hll_add_agg(1::hll_hashval);Ekstensi hll mendukung fungsi hll_union untuk melakukan operasi UNION pada data hll. Contoh:
select hll_union(hll_add_agg(1::hll_hashval),hll_add_agg(2::hll_hashval));Ekstensi hll mendukung fungsi hll_set_defaults untuk menetapkan akurasi. Contoh:
select hll_set_defaults(15,5,-1,1);Ekstensi hll mendukung fungsi hll_print untuk menampilkan informasi debug. Contoh:
select hll_print(hll_add_agg(1::hll_hashval));
Perintah sampel
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);
postgres=# select #userids from access_date where acc_date=current_date;
?column?
------------------
9.725,85273370708
(1 row)
postgres=# select #userids from access_date where acc_date=current_date-1;
?column?
------------------
14.968,6596883279
(1 row)
postgres=# select #userids from access_date where acc_date=current_date-2;
?column?
------------------
29.361,5209149911
(1 row) Fitur ini didukung untuk instansi RDS yang menjalankan PostgreSQL 11 atau yang lebih baru. Jika fitur ini tidak didukung, perbarui versi mesin minor dari instansi RDS Anda. Untuk informasi lebih lanjut, lihat Perbarui versi mesin minor.