Categorias:

Funções de agregação (Estimativa percentual) , Funções 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).

A função APPROX_PERCENTILE descarta este estado interno intermediário quando a estimativa do percentual final é retornada. Entretanto, em certos casos de uso avançado, como a estimativa do percentual incremental durante o carregamento em massa, você pode desejar manter o estado intermediário, caso em que você usaria APPROX_PERCENTILE_ACCUMULATE em vez de APPROX_PERCENTILE.

APPROX_PERCENTILE_ACCUMULATE não retorna um valor percentual. Em vez disso, ele retorna o próprio estado do algoritmo. O estado intermediário pode ser mais tarde:

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

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.

Exemplo

Armazenar o estado t-Digest da coluna testTable.c1 em uma tabela e depois usar o estado para computar os percentuais:

-- create a table from the accumulated t-Digest state for testtable.c1
create or replace table resultstate as
    select approx_percentile_accumulate(c1) s from testtable;

-- Next, use the t-Digest state to compute percentiles for testtable.

-- returns an approximated value for the 1.5th percentile of testtable.c1
select approx_percentile_estimate(s, 0.015) from resultstate;

-- returns an approximated value for the 20th percentile of testtable.c1
select approx_percentile_estimate(s, 0.2) from resultstate;
Copy

Aqui está um exemplo mais extenso. Isto mostra o uso de todas as três funções relacionadas: APPROX_PERCENTILE_ACCUMULATE, APPROX_PERCENTILE_ESTIMATE e APPROX_PERCENTILE_COMBINE:

Criar uma tabela e dados simples:

-- Create a table and insert some rows for which we'll later estimate the 
-- median value (the value at the 50th percentile).
CREATE OR REPLACE TABLE test_table1 (c1 INTEGER);
-- Insert data.
INSERT INTO test_table1 (c1) VALUES (1), (2), (3), (4);
Copy

Criar uma tabela que contenha o “estado” que representa as informações aproximadas do percentual atual para a tabela chamada test_table1:

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

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

Saída:

SELECT approx_percentile_estimate(rs1, 0.5) 
    FROM resultstate1;
+--------------------------------------+
| APPROX_PERCENTILE_ESTIMATE(RS1, 0.5) |
|--------------------------------------|
|                                  2.5 |
+--------------------------------------+
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) VALUES (5), (6), (7), (8);
Copy

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

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

Obtenha o valor mediano aproximado do conjunto combinado de linhas:

SELECT approx_percentile_estimate(c1, 0.5) FROM combined_resultstate;
Copy

Saída:

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