すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:hll拡張子を使用する

最終更新日:Nov 12, 2024

このトピックでは、hll拡張機能を使用してページビュー (PV) とユニークビジター (UV) を推定する方法について説明します。 このトピックでは、拡張機能でサポートされているHyperLogLogデータ型についても説明します。

前提条件

  • RDSインスタンスはPostgreSQL 11以降のバージョンを実行します。

    説明

    この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。

  • RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合、RDSインスタンスのマイナーエンジンバージョンが更新されます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

背景情報

hll拡張は、拡張可能なセットに似たデータ型HyperLogLog (hll) をサポートして、指定された精度でDISTINCT要素を推定します。 たとえば、1,280バイトのhllデータを使用して、数十億個のDISTINCT要素を正確に推定できます。 hll拡張は、PVおよびUVを推定するためのインターネット広告分析などの推定分析が必要な業界に適しています。

hll拡張機能の使用方法の詳細については、postgresql-hllをご参照ください。

詳細なアルゴリズムの詳細については、HyperLogLog: 最適に近いカーディナリティ推定アルゴリズムの分析をご覧ください。

hll拡張子の作成

インスタンスに接続した後、次のステートメントを実行してhllエクステンションを作成します。

CREATE EXTENSION hll;

基本操作

  • 次のステートメントを実行して、hllフィールドを含むテーブルを作成します。

    create table agg (id int primary key,userids hll);
  • 次の文を実行して、INTデータを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;

基本機能

  • hll拡張は、hll_hash_boolean、hll_hash_smallint、hll_hash_bigintなどのハッシュ関数をサポートします。 例:

    select hll_hash_boolean(true);
    select hll_hash_integer(1);
  • hll拡張機能は、データ型をINTからhllに変換するhll_add_agg関数をサポートしています。 例:

    select hll_add_agg(1::hll_hashval);
  • hll拡張は、hll_union関数をサポートして、hllデータに対してUNION操作を実行します。 例:

    select hll_union(hll_add_agg(1::hll_hashval),hll_add_agg(2::hll_hashval));
  • hll拡張は、精度を設定するためのhll_set_defaults関数をサポートしています。 例:

    select hll_set_defaults(15,5,-1,1);
  • hll拡張機能は、デバッグ情報を表示するhll_print機能をサポートしています。 例:

    select hll_print(hll_add_agg(1::hll_hashval));

サンプルコマンド

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?
------------------
 9725.85273370708
(1 row)
postgres=# select #userids from access_date where acc_date=current_date-1;
     ?column?
------------------
 14968.6596883279
(1 row)
postgres=# select #userids from access_date where acc_date=current_date-2;
     ?column?
------------------
 29361.5209149911
(1 row) The feature is supported for RDS instances that run PostgreSQL 11 or later. If the feature is not supported, update the minor engine version of your RDS instance. For more information, see Upgrade the minor engine version.