- Categorias:
Funções de agregação (Estimativa de frequência) , Funções de janela
APPROX_TOP_K¶
Usa Space-Saving para retornar uma aproximação dos valores mais frequentes na entrada, junto com suas frequências aproximadas.
A saída é uma matriz JSON de matrizes. Nas matrizes internas, a primeira entrada é um valor na entrada, e a segunda entrada corresponde a sua frequência estimada na entrada. A matriz externa contém itens k
, ordenados por frequência descendente.
Para obter mais informações sobre APPROX_TOP_K, consulte Estimativa de valores frequentes.
- Consulte também:
APPROX_TOP_K_ACCUMULATE , APPROX_TOP_K_COMBINE, APPROX_TOP_K_ESTIMATE
Sintaxe¶
Função de agregação
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] )
Função de janela
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] ) OVER ( [ PARTITION BY <expr4> ] )
Argumentos¶
expr
: a expressão (por exemplo, nome da coluna) para a qual você quer encontrar os valores mais comuns.k
: o número de valores cujas contagens você quer aproximadas. Por exemplo, se você quiser ver os 10 valores mais comuns, então definak
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.counters
: este é o número máximo de valores distintos que podem ser rastreados de cada vez durante o processo de estimativa. Por exemplo, secounters
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).
expr4
Esta é a expressão opcional usada para agrupar linhas em partições.
Notas de uso¶
A aproximação é mais precisa se o número de
counters
for grande, portanto na maioria dos casoscounters
deve ser consideravelmente maior do quek
. (Cada contador utiliza apenas uma pequena quantidade de memória, portanto, aumentar o número de contadores não é caro em termos de memória).
Quando usado como uma função de janela:
Esta função não oferece suporte para:
Subcláusula ORDER BY na cláusula OVER().
Quadros de janela.
Exemplos¶
SELECT APPROX_TOP_K(C4) FROM lineitem;
--------------------+
APPROX_TOP_K(C4,3) |
--------------------|
[ |
[ |
1, |
124923 |
], |
[ |
2, |
107093 |
], |
[ |
3, |
89315 |
] |
] |
--------------------+
WITH states AS (
SELECT approx_top_k(C4, 3, 5) AS state
FROM lineitem
)
SELECT value[0]::INT AS value, value[1]::INT AS frequency
FROM states, LATERAL FLATTEN(state);
-------+-----------+
VALUE | FREQUENCY |
-------+-----------|
1 | 124923 |
2 | 107093 |
3 | 89438 |
-------+-----------+