HyperLogLog関数は近似集計関数であり、approx_distinct関数に似ています。 大量のデータが計算に含まれる場合、HyperLogLog関数を使用して、より短い時間内に推定結果を返すことができます。 このトピックでは、HyperLogLog関数の構文について説明します。 このトピックでは、HyperLogLog関数の使用方法の例も提供します。
次の表に、Simple Log ServiceでサポートされているHyperLogLog関数を示します。
分析ステートメントで文字列を使用する場合は、文字列を単一引用符 (')で囲む必要があります。 二重引用符 (") で囲まれていない、または囲まれている文字列は、フィールド名または列名を示します。 例えば、 'status' はステータスの文字列を示し、status または "status" はステータスログフィールドを示します。
関数 | 構文 | 説明 | SQLでサポート | SPLでサポート |
approx_set( x) | xフィールドの個別の値の数を推定します。 最大標準誤差は0.01625で、これがデフォルト値です。 | √ | × | |
cardinality( x) | HyperLogLogデータをbigintデータに変換します。 | √ | × | |
empty_approx_set() | HyperLogLog型のnull値を返します。 最大標準誤差は0.01625で、これがデフォルト値です。 | √ | × | |
merge( x) | すべてのHyperLogLog値を集計します。 | √ | × |
approx_set関数
approx_set関数は、xフィールド内の異なる値の数を推定します。 最大標準誤差は0.01625で、これがデフォルト値です。
構文
approx_set(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
HyperLogLogタイプ。
例
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
クエリと分析結果
cardinality関数
カーディナリティ関数は、HyperLogLogデータをbigintデータに変換します。
構文
cardinality(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は、HyperLogLogタイプです。 |
戻り値のデータ型
bigint型。
例
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
クエリと分析結果
empty_approx_set関数
empty_approx_set関数は、HyperLogLog型のnull値を返します。 最大標準誤差は0.01625で、これがデフォルト値です。
構文
empty_approx_set()
戻り値のデータ型
HyperLogLogタイプ。
例
HyperLogLogタイプのnull値を取得します。
クエリ文
* | SELECT empty_approx_set()
クエリと分析結果
マージ関数
マージ関数は、すべてのHyperLogLog値を集計します。
構文
merge(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は、HyperLogLogタイプです。 |
戻り値のデータ型
HyperLogLogタイプ。
例
HyperLogLog値を集計します。 approx_set関数は、1分あたりのUVの推定数を返します。 マージ関数は、15分のUVの数を集計します。 カーディナリティ関数は、HyperLogLogデータを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 log GROUP BY Time ORDER BY Time )
クエリと分析結果