Funções do HyperLogLog++ no SQL padrão

O BigQuery aceita as funções de agregação aproximada a seguir com o uso do algoritmo HyperLogLog++. Para uma explicação de como as funções de agregação aproximada funcionam, consulte Agregação aproximada.

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

Descrição

Uma função de agregação que usa um ou mais valores input e os agrega em um sketch de HyperLogLog++ (em inglês). Cada sketch é representado usando o tipo de dados BYTES. Em seguida, é possível mesclar os sketches usando HLL_COUNT.MERGE ou HLL_COUNT.MERGE_PARTIAL. Se nenhuma mesclagem for necessária, será possível extrair do rascunho a contagem final de valores distintos usando HLL_COUNT.EXTRACT.

Essa função suporta um parâmetro opcional, precision. Esse parâmetro define a precisão da estimativa ao custo da memória adicional necessária para processar os sketches ou armazená-los no disco. A tabela a seguir mostra os valores de precisão permitidos, o tamanho máximo do sketch por grupo e o intervalo de confiança (CI, na sigla em inglês) de precisões típicas:

Precisão Tamanho máx. do sketch (KiB) CI de 65% CI de 95% CI de 99%
10 1 ±1,63% ±3,25% ±6,50%
11 2 ±1,15% ±2,30% ±4,60%
12 4 ±0,81% ±1,63% ±3,25%
13 8 ±0,57% ±1,15% ±1,72%
14 16 ±0,41% ±0,81% ±1,22%
15 (padrão) 32 ±0,29% ±0,57% ±0,86%
16 64 ±0,20% ±0,41% ±0,61%
17 128 ±0,14% ±0,29% ±0,43%
18 256 ±0,10% ±0,20% ±0,41%
19 512 ±0,07% ±0,14% ±0,29%
20 1024 ±0,05% ±0,10% ±0,20%
21 2048 ±0,04% ±0,07% ±0,14%
22 4096 ±0,03% ±0,05% ±0,10%
23 8192 ±0,02% ±0,04% ±0,07%
24 16384 ±0,01% ±0,03% ±0,05%

Se a entrada for NULL, essa função retornará NULL.

Para mais informações, consulte HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm (em inglês).

Tipos de entradas compatíveis

INT64, NUMERIC, STRING e BYTES

Tipo de retorno

BYTES

Exemplo

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

Descrição

Uma função de agregação que retorna a cardinalidade de vários sketches definidos por HyperLogLog++ (em inglês) pelo cálculo da união.

Cada sketch precisa ter a mesma precisão e ser inicializado no mesmo tipo. As tentativas de mesclar sketches com precisões ou tipos diferentes resultam em erro. Por exemplo, não é possível mesclar um sketch inicializado nos dados de INT64 com um inicializado nos dados de STRING.

Essa função ignora os valores NULL ao mesclar sketches. Se a mesclagem acontecer em linhas de zero ou somente em valores NULL, a função retornará 0.

Tipos de entradas compatíveis

BYTES

Tipo de retorno

INT64

Exemplo

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

Descrição

Uma função de agregação que usa uma ou mais entradas sketch de HyperLogLog++ (em inglês) e as mescla em um novo sketch.

Essa função retornará NULL se não houver entradas ou se todas elas forem NULL.

Tipos de entradas compatíveis

BYTES

Tipo de retorno

BYTES

Exemplo

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

Descrição

Uma função escalar que extrai uma estimativa da cardinalidade de um único sketch do HyperLogLog++ (em inglês).

Se sketch for NULL, essa função retornará uma estimativa de cardinalidade de 0.

Tipos de entradas compatíveis

BYTES

Tipo de retorno

INT64

Exemplo

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+