Categorias:

Funções de agregação (Frequency Estimation) , Sintaxe e uso da função de janela

APPROX_TOP_K_COMBINE

Combina (funde) os estados de entrada em apenas um estado de saída.

Isto permite cenários onde APPROX_TOP_K_ACCUMULATE é executado sobre partições horizontais da mesma tabela, produzindo um estado de algoritmo para cada partição da tabela. Estes estados podem ser combinados mais tarde usando APPROX_TOP_K_COMBINE, produzindo o mesmo estado de saída que uma única execução de APPROX_TOP_K_ACCUMULATE sobre toda a tabela.

Consulte também:

APPROX_TOP_K_ACCUMULATE , APPROX_TOP_K_ESTIMATE

Sintaxe

APPROX_TOP_K_COMBINE( <state> [ , <counters> ] )

Argumentos

state

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

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

Retornos

Isto retorna informações sobre o “estado” do cálculo top K.

This state information is not usually useful by itself, but can be passed to the function APPROX_TOP_K_ESTIMATE.

Notas de uso

  • Se counters estiver definido, o estado de saída utiliza o número especificado de contadores.

  • Se counters não estiver definido, todos os estados de entrada devem ter o mesmo número de contadores.

  • Os valores decimais flutuantes (DECFLOAT) não são compatíveis.

Exemplos

This example shows how to use the three related functions APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE, and 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 OR REPLACE SEQUENCE seq91;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.NEXTVAL, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

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;

Create a table that contains the «state» that represents the current approximate Top K information for the table named sequence_demo:

CREATE OR REPLACE TABLE resultstate1 AS (
  SELECT APPROX_TOP_K_ACCUMULATE(c1, 50) AS rs1
    FROM sequence_demo);

Now create a second table and add data. (In a more realistic situation, the user could have loaded more data into the first table and divided the data into non-overlapping sets based on the time that the data was loaded.)

CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
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;
+------------------------------+
| APPROX_TOP_K_ESTIMATE(C1, 4) |
|------------------------------|
| [                            |
|   [                          |
|     5,                       |
|     2                        |
|   ],                         |
|   [                          |
|     6,                       |
|     2                        |
|   ],                         |
|   [                          |
|     7,                       |
|     2                        |
|   ],                         |
|   [                          |
|     8,                       |
|     2                        |
|   ]                          |
| ]                            |
+------------------------------+