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

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

最終更新日:Jan 11, 2024

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

前提条件

  • RDSインスタンスのメジャーエンジンバージョンは、拡張機能でサポートされています。 詳細については、「ApsaraDB RDS For PostgreSQLでサポートされている拡張機能」をご参照ください。

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

背景情報

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

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

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

hll拡張子の作成

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

拡張hllを作成します。

基本操作

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

    テーブルagg (id intプライマリキー、userids hll) を作成します。
  • 次の文を実行して、INTデータをhll_hashvalデータに変換します。

    選択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);
    # 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などのハッシュ関数をサポートします。 例:

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

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

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

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

    hll_print(hll_add_agg(1::hll_hashval)) を選択します。

サンプルコマンド

テーブルaccess_date (acc_date unique, userids hll) を作成します。select current_date, hll_add_agg(hll_hash_integer(user_id)) from generate_series(1,10000) t(user_id);
access_date選択current_date-1に挿入、hll_add_agg(hll_hash_integer(user_id)) from generate_series(5000,20000) t(user_id);
access_date選択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 (acc_date=current_date);
     ? コラム?
------------------
 9725.85273370708
(1行)
postgres=# select #userids from access_date (acc_date=current_date-1);
     ? コラム?
------------------
 14968.6596883279
(1行)
postgres=# select #userids from access_date (acc_date=current_date-2);
     ? コラム?
------------------
 29361.5209149911
(1行) この機能は、PostgreSQL 11以降を実行するRDSインスタンスでサポートされています。 この機能がサポートされていない場合は、RDSインスタンスのマイナーエンジンバージョンを更新します。 詳細については、「マイナーエンジンバージョンのアップグレード」をご参照ください。