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 escalar que utiliza um ou mais valores input e os agrega em um esboço HyperLogLog++. Cada esboço é representado pelo tipo de dado BYTES. Os esboços podem ser mesclados com o uso de HLL_COUNT.MERGE ou HLL_COUNT.MERGE_PARTIAL. Se nenhuma mesclagem for necessária, você pode extrair a contagem final de valores distintos por meio de HLL_COUNT.EXTRACT.

Um input pode ser:

  • INT64
  • STRING
  • BYTES

Essa função é compatível com um parâmetro opcional: precision. Ele define a precisão da estimativa ao custo da memória adicional necessária para processar os esboços ou armazená-los no disco. A tabela a seguir mostra os valores de precisão permitidos, o tamanho máximo do esboço 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 esboço (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.

Tipo de entrada compatível

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 esboços definidos por HyperLogLog++ pelo cálculo da união.

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

Essa função ignora os valores NULL ao mesclar esboços. 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 utiliza uma ou mais entradas HyperLogLog++ sketch e as mescla em um novo esboço.

Essa função retornará NULL, se não houver entrada 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 esboço do HyperLogLog++.

Se sketch for NULL, ela 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               |
+------------+---------+-----------------+
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.