Categorias:

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

HLL_ACCUMULATE

Retorna o estado de HyperLogLog no final da agregação.

Para obter mais informações sobre HyperLogLog, consulte Estimativa do número de valores distintos.

HLL descarta seu estado intermediário quando a estimativa final de cardinalidade é retornada. Em casos de uso avançado, como a estimativa de cardinalidade incremental durante o carregamento em massa, pode-se querer manter o estado intermediário. O estado intermediário pode posteriormente ser combinado (fundido) com outros estados intermediários, ou pode ser exportado para ferramentas externas.

Em contraste com HLL, HLL_ACCUMULATE não retorna uma estimativa de cardinalidade. Em vez disso, ele pula a etapa final de estimativa e retorna o próprio estado do algoritmo. O estado é um binário de, no máximo, 4096 bytes. Para obter mais informações, consulte Estimativa do número de valores distintos.

Consulte também:

HLL_COMBINE , HLL_ESTIMATE

Sintaxe

HLL_ACCUMULATE( [ DISTINCT ] <expr> )

HLL_ACCUMULATE(*)
Copy

Argumentos

expr

A expressão para a qual você deseja estimar a cardinalidade (número de valores distintos). Este é normalmente um nome de coluna, mas pode ser uma expressão mais geral.

Notas de uso

  • DISTINCT pode ser incluído como um argumento, mas não tem efeito.

Exemplos

Isto mostra um passo para estimar o número de códigos postais distintos na(s) província(s) do Canadá. Nesta etapa, calculamos o número aproximado de códigos postais distintos em Manitoba e armazenamos uma representação interna do “estado” do cálculo, que podemos posteriormente combinar com informações semelhantes para outras províncias:

CREATE TABLE temporary_hll_state_for_manitoba AS
 SELECT HLL_ACCUMULATE(postal_code) as h_a_p_c
  FROM postal_data
  WHERE province = 'Manitoba'
  ;
Copy

Aqui está outro exemplo. 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