- 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:
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.
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;
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);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);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;Saída:
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 data. 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;Saída:
SELECT approx_percentile_estimate(c1, 0.5) FROM combined_resultstate; +-------------------------------------+ | APPROX_PERCENTILE_ESTIMATE(C1, 0.5) | |-------------------------------------| | 4.5 | +-------------------------------------+