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:

HLL , HLL_ACCUMULATE , HLL_ESTIMATE

Sintaxe

HLL_COMBINE([DISTINCT] state)
Copy

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;
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