- Categorias:
Funções de agregação (Frequency Estimation) , Sintaxe e uso da função de janela
APPROX_TOP_K_ACCUMULATE¶
Retorna o resumo de Space-Saving ao final da agregação. (Para obter mais informações sobre o resumo de Space-Saving, consulte Estimativa de valores frequentes).
A função APPROX_TOP_K descarta seu estado interno intermediário quando a estimativa final de cardinalidade é retornada. Entretanto, em certos casos de uso avançado, tais como a estimativa de valores incrementais frequentes durante o carregamento em massa, você pode querer manter o estado intermediário, caso em que você usaria APPROX_TOP_K_ACCUMULATE em vez de APPROX_TOP_K.
Em comparação com APPROX_TOP_K, APPROX_TOP_K_ACCUMULATE não retorna uma estimativa de frequência dos itens. Em vez disso, ele retorna o próprio estado do algoritmo. O estado intermediário pode ser mais tarde:
Combinado (ou seja, fundido) com estados intermediários de lotes de dados separados, mas relacionados.
Processado por outras funções que operam diretamente no estado intermediário, por exemplo, APPROX_TOP_K_ESTIMATE. (Para um exemplo, consulte a seção de exemplos abaixo.)
Exportado para ferramentas externas.
- Consulte também:
Sintaxe¶
APPROX_TOP_K_ACCUMULATE( <expr> , <counters> )
Argumentos¶
expr
A expressão (por exemplo, nome da coluna) para a qual você quer encontrar os valores mais comuns.
counters
Este é o número máximo de valores distintos que podem ser rastreados de cada vez durante o processo de estimativa.
Por exemplo, se
counters
estiver definido como 100000, então o algoritmo rastreia 100.000 valores distintos, tentando manter os 100.000 valores mais frequentes.O número máximo de
counters
é100000
(100.000).
Exemplos¶
Este exemplo mostra como usar as três funções relacionadas APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE e APPROX_TOP_K_COMBINE.
Nota
Este exemplo utiliza mais contadores do que valores de dados distintos para obter resultados consistentes. Em aplicações do mundo real, o número de valores distintos é geralmente maior do que o número de contadores, portanto, as aproximações podem variar.
Este exemplo gera uma tabela com 8 linhas que possuem valores 1 - 8, e uma segunda tabela com 8 linhas que têm valores 5 - 12. Assim, os valores mais frequentes na união das duas tabelas são os valores 5-8, cada um deles com uma contagem de 2.
Criar uma tabela e dados simples:
-- Create a sequence to use to generate values for the table.
CREATE OR REPLACE SEQUENCE seq91;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.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 atuais aproximadas do Top K para a tabela chamada sequence_demo:
CREATE OR REPLACE TABLE resultstate1 AS (
SELECT approx_top_k_accumulate(c1, 50) 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 approx_top_k_accumulate(c1, 50) 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 approx_top_k_combine(rs1) AS apc1
FROM (
SELECT rs1 FROM resultstate1
UNION ALL
SELECT rs1 FROM resultstate2
)
;
Obtenha o valor aproximado do Top K do conjunto combinado de linhas:
SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate;
Saída:
+------------------------------+
| APPROX_TOP_K_ESTIMATE(C1, 4) |
|------------------------------|
| [ |
| [ |
| 5, |
| 2 |
| ], |
| [ |
| 6, |
| 2 |
| ], |
| [ |
| 7, |
| 2 |
| ], |
| [ |
| 8, |
| 2 |
| ] |
| ] |
+------------------------------+