Categorias:

Funções de agregação (Estimativa de cardinalidade) , Funções de janela

HLL_ESTIMATE

Retorna a estimativa de cardinalidade para o estado de HyperLogLog dado.

Um estado HyperLogLog produzido por HLL_ACCUMULATE e HLL_COMBINE pode ser usado para calcular uma estimativa de cardinalidade usando a função HLL_ESTIMATE.

Assim, HLL_ESTIMATE(HLL_ACCUMULATE(…)) é equivalente a HLL(…).

Consulte também:

HLL , HLL_ACCUMULATE , HLL_COMBINE

Sintaxe

HLL_ESTIMATE( <state> )
Copy

Argumentos

state

Uma expressão que contém informações de estado geradas por uma chamada para HLL_ACCUMULATE ou HLL_COMBINE.

Exemplos

Este exemplo mostra como usar as três funções relacionadas HLL_ACCUMULATE, HLL_ESTIMATE e HLL_COMBINE.

Criar uma tabela e dados simples:

-- Create a sequence to use to generate values for the table.
CREATE OR REPLACE SEQUENCE seq92;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq92.nextval, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

-- Double the number of rows a few times, until there are 8 rows:
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
Copy

Criar uma tabela que contenha o “estado” que representa as informações aproximadas de cardinalidade atuais para a tabela chamada sequence_demo:

CREATE OR REPLACE TABLE resultstate1 AS (
     SELECT hll_accumulate(c1) AS rs1
        FROM sequence_demo);
Copy

Agora crie uma segunda tabela e adicione dados. (Em uma situação mais realista, o usuário poderia ter carregado mais dados na primeira tabela e dividido os dados em conjuntos não sobrepostos com base no tempo em que os dados foram carregados).

CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
-- Insert data.
INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;
Copy

Obtenha as informações de “estado” apenas para os novos dados.

CREATE OR REPLACE TABLE resultstate2 AS 
  (SELECT hll_accumulate(c1) AS rs1 
     FROM test_table2);
Copy

Combine as informações de “estado” para os dois lotes de linhas:

CREATE OR REPLACE TABLE combined_resultstate (c1) AS 
  SELECT hll_combine(rs1) AS apc1
    FROM (
        SELECT rs1 FROM resultstate1
        UNION ALL
        SELECT rs1 FROM resultstate2
      )
      ;
Copy

Obtenha a cardinalidade aproximada do conjunto de linhas combinadas:

SELECT hll_estimate(c1) FROM combined_resultstate;
Copy

Saída:

+------------------+
| HLL_ESTIMATE(C1) |
|------------------|
|               12 |
+------------------+
Copy