- 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¶
exprA expressão (por exemplo, nome da coluna) para a qual você quer encontrar os valores mais comuns.
countersEste é o número máximo de valores distintos que podem ser rastreados de cada vez durante o processo de estimativa.
Por exemplo, se
countersestiver 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).
Usage notes¶
Os valores decimais flutuantes (DECFLOAT) não são compatíveis.
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 |
| ] |
| ] |
+------------------------------+