- Categorias:
Funções de agregação (Frequency Estimation) , Sintaxe e uso da função de janela
APPROX_TOP_K_ESTIMATE¶
Retorna os valores aproximados mais frequentes e sua frequência estimada para o estado de Space-Saving determinado. (Para obter mais informações sobre o resumo de Space-Saving, consulte Estimativa de valores frequentes).
Um estado de Space-Saving produzido por APPROX_TOP_K_ACCUMULATE e APPROX_TOP_K_COMBINE pode ser usado para calcular uma estimativa de cardinalidade usando a função APPROX_TOP_K_ESTIMATE.
Assim, APPROX_TOP_K_ESTIMATE(APPROX_TOP_K_ACCUMULATE(…)) é equivalente a APPROX_TOP_K(…).
- Consulte também:
APPROX_TOP_K , APPROX_TOP_K_ACCUMULATE , APPROX_TOP_K_COMBINE
Sintaxe¶
APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )
Argumentos¶
stateUma expressão que contém informações de estado geradas por uma chamada para APPROX_TOP_K_ACCUMULATE ou APPROX_TOP_K_COMBINE.
kO número de valores cujas contagens você quer aproximadas. Por exemplo, se você quiser ver os 10 valores mais comuns, então defina
kcomo 10.Se
kfor omitido, o padrão é1.O valor máximo é
100000(100.000), e é automaticamente reduzido se os itens não couberem na saída.
Retornos¶
Retorna um valor do tipo ARRAY.
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 | | ] | | ] | +------------------------------+