- Categorias:
Funções de agregação (Estimativa de cardinalidade) , Funções de janela
HLL_COMBINE¶
Combina (funde) os estados de entrada em apenas um estado de saída.
Isto permite cenários onde HLL_ACCUMULATE é executado sobre partições horizontais da mesma tabela, produzindo um estado de algoritmo para cada partição da tabela. Estes estados podem ser combinados mais tarde usando HLL_COMBINE, produzindo o mesmo estado de saída que uma única execução de HLL_ACCUMULATE sobre toda a tabela.
- Consulte também:
Sintaxe¶
HLL_COMBINE([DISTINCT] state)
Argumentos¶
state
Uma expressão que contém informações de estado geradas por uma chamada para HLL_ACCUMULATE.
Notas de uso¶
DISTINCT
é suportado sintaticamente, mas não tem efeito.A saída desta função não é totalmente determinística. A execução desta função com as mesmas entradas pode retornar resultados diferentes em momentos diferentes. As diferenças são tipicamente pequenas e são consistentes com o fato de que as funções HLL_* são funções de aproximação.
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;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 | +------------------+