- 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:
Sintaxe¶
HLL_ACCUMULATE( [ DISTINCT ] <expr> )
HLL_ACCUMULATE(*)
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' ;
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;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);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;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);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 ) ;Obtenha a cardinalidade aproximada do conjunto de linhas combinadas:
SELECT hll_estimate(c1) FROM combined_resultstate;Saída:
+------------------+ | HLL_ESTIMATE(C1) | |------------------| | 12 | +------------------+