HyperLogLog 関数は、approx_distinct のような近似集計関数です。大規模なデータセットを分析する際に、推定結果を迅速に返します。
以下の HyperLogLog 関数が利用可能です。
分析文で文字列を使用する場合は、文字列を一重引用符 ('') で囲む必要があります。囲まれていない文字列または二重引用符 ("") で囲まれている文字列は、フィールド名または列名を示します。たとえば、 'status' は「status」という文字列を示し、status または "status" は「status」というフィールドを示します。
|
関数 |
構文 |
説明 |
SQL サポート |
SPL サポート |
|
approx_set(x) |
x 内の個別値の数を推定します。デフォルトの最大標準誤差は 0.01625 です。 |
√ |
× |
|
|
cardinality(x) |
HyperLogLog 値を bigint 値に変換します。 |
√ |
× |
|
|
empty_approx_set() |
空の HyperLogLog セットを返します。デフォルトの最大標準誤差は 0.01625 です。 |
√ |
× |
|
|
merge(x) |
複数の HyperLogLog セットを 1 つのセットにマージします。 |
√ |
× |
approx_set 関数
approx_set 関数は、x 内の個別値の数を推定します。デフォルトの最大標準誤差は 0.01625 です。
構文
approx_set(x)
パラメーター
|
パラメーター |
説明 |
|
x |
任意のデータ型の式。 |
戻り値のデータ型
HyperLogLog
例
Web サイトの 1 分あたりのユニークビジター (UV) を推定します。結果は HyperLogLog 形式です。
-
クエリと分析文
* | SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time -
クエリと分析結果:
Time(分単位に切り捨てられたタイムスタンプ) とUV(approx_setによるエンコードされた近似セット) を返します。合計:16 レコード。
cardinality 関数
cardinality 関数は、HyperLogLog 値を bigint 値に変換します。
構文
cardinality(x)
パラメーター
|
パラメーター |
説明 |
|
x |
HyperLogLog 式。 |
戻り値のデータ型
bigint
例
approx_set を使用して 1 分あたりの UV を推定し (HyperLogLog 値を返す)、次に cardinality を使用してその値を bigint に変換します。
-
クエリと分析文
* | SELECT Time, cardinality(UV) AS UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time ) AS UV -
結果には、Time 列と UV 列に 1 分あたりの UV 数が示されます。例えば、2021-09-09 15:12:00 に 78 UV、15:13:00 に 561 UV となります。
empty_approx_set 関数
empty_approx_set 関数は、空の HyperLogLog セットを返します。デフォルトの最大標準誤差は 0.01625 です。
構文
empty_approx_set()
戻り値のデータ型
HyperLogLog
例
空の HyperLogLog セットを返します。
-
クエリと分析文
* | SELECT empty_approx_set() -
単一の列
_col0を返し、その値はAgwAAA==(Base64 でエンコードされた空の近似セット) です。
merge 関数
merge 関数は、複数の HyperLogLog セットを 1 つのセットにマージします。
構文
merge(x)
パラメーター
|
パラメーター |
説明 |
|
x |
HyperLogLog 式。 |
戻り値のデータ型
HyperLogLog
例
approx_set を使用して 1 分あたりの UV を推定し、merge を使用して UV セットをマージし、cardinality を使用して最終的な値を bigint に変換します。
-
クエリと分析文
* | SELECT Time, cardinality(UV) AS UV, cardinality(merge(UV) over()) AS Total_UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time ) -
クエリと分析結果:1 分あたりの UV 数は変動しますが (561、658、625)、Total_UV はすべての行で同じ全体の合計値 (8564) を示します。