Categorias:

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

APPROX_PERCENTILE_ACCUMULATE

Retorna a representação interna do estado t-Digest (como um objeto JSON) no final da agregação. (Para obter mais informações sobre o t-Digest, consulte: Estimativa de valores percentuais).

The function APPROX_PERCENTILE discards this internal, intermediate state when the final percentile estimate is returned. However, in certain advanced use cases, such as estimating incremental percentile during bulk loading, you may wish to keep the intermediate state, in which case you would use APPROX_PERCENTILE_ACCUMULATE instead of APPROX_PERCENTILE.

APPROX_PERCENTILE_ACCUMULATE does not return a percentile value. Instead, it returns the algorithm state itself. The intermediate state can later be:

  • Combinado (ou seja, fundido) com outros estados intermediários de lotes de dados separados, mas relacionados.

  • Processado por outras funções que operam diretamente no estado intermediário, por exemplo, APPROX_PERCENTILE_ESTIMATE. (Para um exemplo, consulte a seção de exemplos abaixo.)

  • Exportado para ferramentas externas.

Consulte também:

APPROX_PERCENTILE_COMBINE , APPROX_PERCENTILE_ESTIMATE

Sintaxe

APPROX_PERCENTILE_ACCUMULATE( <expr> )

Argumentos

expr

Uma expressão válida, como o nome de uma coluna, que avalia como um valor numérico.

Notas de uso

  • O percentual funciona apenas em valores numéricos, portanto expr deve produzir valores que são números ou podem ser convertidos em números.

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

Exemplo

Store the t-Digest state of the testtable.c1 column in a table and then use the state to compute percentiles:

CREATE OR REPLACE TABLE resultstate AS
  SELECT APPROX_PERCENTILE_ACCUMULATE(c1) AS s
    FROM testtable;

SELECT APPROX_PERCENTILE_ESTIMATE(s, 0.015)
  FROM resultstate;

SELECT APPROX_PERCENTILE_ESTIMATE(s, 0.2)
  FROM resultstate;

Here is a more extensive example that shows the usage of all three related functions: APPROX_PERCENTILE_ACCUMULATE, APPROX_PERCENTILE_ESTIMATE, and APPROX_PERCENTILE_COMBINE.

Criar uma tabela e dados simples:

CREATE OR REPLACE TABLE test_table1 (c1 INTEGER);
INSERT INTO test_table1 (c1) VALUES (1), (2), (3), (4);

Create a table that contains the «state» that represents the current approximate percentile information for the table named test_table1:

CREATE OR REPLACE TABLE resultstate1 AS (
  SELECT APPROX_PERCENTILE_ACCUMULATE(c1) AS rs1
    FROM test_table1);

Usar essa informação de estado para exibir a estimativa atual do valor da mediana (0,5 significa que queremos o valor no percentual 50):

SELECT APPROX_PERCENTILE_ESTIMATE(rs1, 0.5)
  FROM resultstate1;
+--------------------------------------+
| APPROX_PERCENTILE_ESTIMATE(RS1, 0.5) |
|--------------------------------------|
|                                  2.5 |
+--------------------------------------+

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 INTO test_table2 (c1) VALUES (5), (6), (7), (8);

Obtenha as informações de “estado” apenas para os novos dados.

CREATE OR REPLACE TABLE resultstate2 AS
  (SELECT APPROX_PERCENTILE_ACCUMULATE(c1) 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_PERCENTILE_COMBINE(rs1) AS apc1
    FROM (
      SELECT rs1 FROM resultstate1
      UNION ALL
      SELECT rs1 FROM resultstate2
    );

Obtenha o valor mediano aproximado do conjunto combinado de linhas:

SELECT APPROX_PERCENTILE_ESTIMATE(c1, 0.5)
  FROM combined_resultstate;
+-------------------------------------+
| APPROX_PERCENTILE_ESTIMATE(C1, 0.5) |
|-------------------------------------|
|                                 4.5 |
+-------------------------------------+