全部產品
Search
文件中心

Simple Log Service:HyperLogLog函數

更新時間:Jun 30, 2024

HyperLogLog函數為近似彙總函式,類似於approx_distinct函數。當計算的資料量非常大時,使用HyperLogLog函數可快速返回估算結果。本文介紹HyperLogLog函數的基本文法以及樣本。

Log Service支援如下HyperLogLog函數。

重要 在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status"status"表示日誌欄位status。

函數名稱

文法

說明

支援SQL

支援SPL

approx_set函數

approx_set(x)

估算x中不重複值的個數,最大標準誤差預設為0.01625。

×

cardinality函數

cardinality(x)

將HyperLogLog類型的內容轉換為bigint類型。

×

empty_approx_set函數

empty_approx_set()

返回一個HyperLogLog類型的空值。最大標準誤差預設為0.01625。

×

merge函數

merge(x)

彙總計算所有的HyperLogLog值。

×

approx_set函數

approx_set函數用於估算x中不重複值的個數,最大標準誤差預設為0.01625。

文法

approx_set(x)

參數說明

參數

說明

x

參數值為任意資料類型。

傳回值類型

HyperLogLog類型。

樣本

使用approx_set函數估算每分鐘的網站訪問UV,返回結果為HyperLogLog編碼格式。

  • 查詢和分析語句

    * |
    SELECT
      date_trunc('minute', __time__) AS Time,
      approx_set(client_ip) AS UV
    FROM  website_log
    GROUP BY
      Time
    ORDER BY
      Time
  • 查詢和分析結果approx_set

cardinality函數

cardinality函數用於將HyperLogLog類型的內容轉換為bigint類型。

文法

cardinality(x)

參數說明

參數

說明

x

參數值為HyperLogLog類型。

傳回值類型

bigint類型。

樣本

使用approx_set函數估算每分鐘的網站訪問UV,返回結果為HyperLogLog類型。然後使用cardinality函數將HyperLogLog類型轉換為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
  • 查詢和分析結果cardinality

empty_approx_set函數

empty_approx_set函數用於返回一個HyperLogLog類型的空值。最大標準誤差預設為0.01625。

文法

empty_approx_set()

傳回值類型

HyperLogLog類型。

樣本

返回一個HyperLogLog類型的空值。

  • 查詢和分析語句

    * | SELECT  empty_approx_set()
  • 查詢和分析結果empty_approx_set

merge函數

merge函數用於彙總計算所有的HyperLogLog值。

文法

merge(x)

參數說明

參數

說明

x

參數值為HyperLogLog類型。

傳回值類型

HyperLogLog類型。

樣本

使用approx_set函數估算每分鐘的網站訪問UV,使用merge函數彙總計算15分鐘內所有的UV,然後使用cardinality函數將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
      )
  • 查詢和分析結果merge