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> ] ) 
Copy

Argumentos

state

Uma expressão que contém informações de estado geradas por uma chamada para APPROX_TOP_K_ACCUMULATE ou APPROX_TOP_K_COMBINE.

k

O número de valores cujas contagens você quer aproximadas. Por exemplo, se você quiser ver os 10 valores mais comuns, então defina k como 10.

Se k for 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.

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

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); 
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 approx_top_k_accumulate(c1, 50) 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 approx_top_k_combine(rs1) AS apc1 FROM ( SELECT rs1 FROM resultstate1 UNION ALL SELECT rs1 FROM resultstate2 ) ; 
Copy

Obtenha o valor aproximado do Top K do conjunto combinado de linhas:

SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate; 
Copy

Saída:

+------------------------------+ | APPROX_TOP_K_ESTIMATE(C1, 4) | |------------------------------| | [ | | [ | | 5, | | 2 | | ], | | [ | | 6, | | 2 | | ], | | [ | | 7, | | 2 | | ], | | [ | | 8, | | 2 | | ] | | ] | +------------------------------+ 
Copy