Categorias:

Funções de agregação (Frequency Estimation) , 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> ] ] )
Copy

Função de janela

APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] ) OVER ( [ PARTITION BY <expr4> ] )
Copy

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 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.

  • 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).

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 casos counters deve ser consideravelmente maior do que k. (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 esta função é chamada como uma função de janela, ela não oferece suporte para:

    • Uma cláusula ORDER BY dentro da cláusula OVER.

    • Quadros de janela explícitos.

Exemplos

SELECT APPROX_TOP_K(C4) FROM lineitem;
Copy
+--------------------+
| 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);
Copy
+-------+-----------+
| VALUE | FREQUENCY |
+-------+-----------+
|     1 |    124923 |
|     2 |    107093 |
|     3 |     89438 |
+-------+-----------+