APPROX_PERCENTILE_ACCUMULATE¶
집계 종료 시 t-Digest 상태의 내부 표현을 (JSON 오브젝트로) 반환합니다. (t-Digest에 대한 자세한 내용은 다음 참조: 백분위수 값 추정하기.)
APPROX_PERCENTILE 함수는 최종 백분위수 추정치가 반환될 때 이 내부 중간 상태를 버립니다. 그러나 대량 로딩 중 증분 백분위수를 추정하는 것과 같은 특정 고급 사용 사례에서는 사용자가 중간 상태를 유지하려고 할 수 있습니다. 이 경우 APPROX_PERCENTILE 대신 APPROX_PERCENTILE_ACCUMULATE
를 사용합니다.
APPROX_PERCENTILE_ACCUMULATE
는 백분위수 값을 반환하지 않습니다. 대신 알고리즘 상태 자체를 반환합니다. 중간 상태는 나중에 다음과 같을 수 있습니다.
별개이지만 관련된 데이터 배치의 다른 중간 상태와 결합(즉, 병합)됩니다.
중간 상태에서 직접 작동하는 다른 함수(예: APPROX_PERCENTILE_ESTIMATE)에 의해 처리됩니다. (예를 들어, 아래의 예 섹션을 참조하십시오.)
외부 도구로 내보냅니다.
구문¶
APPROX_PERCENTILE_ACCUMULATE( <expr> )
인자¶
expr
숫자 값으로 평가되는 유효한 식(예: 열 이름)입니다.
사용법 노트¶
백분위수는 숫자 값에서만 작동하므로
expr
은 숫자이거나 숫자로 캐스팅할 수 있는 값을 생성해야 합니다.
예¶
testTable.c1
열의 t-Digest 상태를 테이블에 저장한 다음, 상태를 사용하여 백분위수를 계산합니다.
-- 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;
다음은 보다 광범위한 예입니다. 이는 세 가지 관련 함수, 즉 APPROX_PERCENTILE_ACCUMULATE
, APPROX_PERCENTILE_ESTIMATE
, APPROX_PERCENTILE_COMBINE
의 사용법을 보여줍니다.
간단한 테이블과 데이터를 만듭니다.
-- 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);test_table1이라는 테이블에 대한 현재의 대략적인 백분위수 정보를 나타내는 “상태”가 포함된 테이블을 만듭니다.
CREATE OR REPLACE TABLE resultstate1 AS ( SELECT approx_percentile_accumulate(c1) AS rs1 FROM test_table1);해당 상태 정보를 사용하여 중앙값의 현재 추정치를 표시합니다(0.5는 50번째 백분위수의 값이 필요함을 의미함).
SELECT approx_percentile_estimate(rs1, 0.5) FROM resultstate1;출력:
SELECT approx_percentile_estimate(rs1, 0.5) FROM resultstate1; +--------------------------------------+ | APPROX_PERCENTILE_ESTIMATE(RS1, 0.5) | |--------------------------------------| | 2.5 | +--------------------------------------+이제 두 번째 테이블을 만들고 데이터를 추가합니다. (보다 현실적인 상황에서 사용자는 첫 번째 테이블에 더 많은 데이터를 로딩하고, 데이터가 로딩된 시간을 기준으로 데이터를 겹치지 않는 세트로 나눌 수 있었습니다.)
CREATE OR REPLACE TABLE test_table2 (c1 INTEGER); -- Insert data. INSERT INTO test_table2 (c1) VALUES (5), (6), (7), (8);새 데이터에 대한 “상태” 정보만 가져옵니다.
CREATE OR REPLACE TABLE resultstate2 AS (SELECT approx_percentile_accumulate(c1) AS rs1 FROM test_table2);행의 두 배치에 대한 “상태” 정보를 결합합니다.
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 ) ;결합된 행 세트의 대략적인 중앙값을 가져옵니다.
SELECT approx_percentile_estimate(c1, 0.5) FROM combined_resultstate;출력:
SELECT approx_percentile_estimate(c1, 0.5) FROM combined_resultstate; +-------------------------------------+ | APPROX_PERCENTILE_ESTIMATE(C1, 0.5) | |-------------------------------------| | 4.5 | +-------------------------------------+