SUMMARIZE: 데이터셋 빠르게 파악하기

SUMMARIZE: 데이터셋 빠르게 파악하기 (Summarize - summarize)

새로운 데이터셋을 받았을 때 전체를 다 훑어보지 않고도 "이 데이터가 대략 어떤 분포를 갖고 있지?"를 알고 싶을 때가 있어요. SUMMARIZE 명령은 테이블이나 쿼리에 대한 여러 집계(aggregate) 값을 한 번에 계산해줘서 데이터 감을 잡는 데 아주 좋아요.

출처: DuckDB 공식 문서 — summarize

개요 (Overview)

SUMMARIZE 명령은 테이블이나 쿼리에 대해 모든 컬럼의 여러 집계값(min, max, approx_unique, avg, std, q25, q50, q75, count)을 계산하는 쿼리를 실행해요. 그리고 이 값들을 컬럼 이름, 컬럼 타입, 컬럼의 NULL 값 비율과 함께 돌려줘요.

참고: 분위수(quantiles)와 백분위수(percentiles)는 근사값(approximate values) 이라는 점을 기억하세요. 정확한 값이 꼭 필요하면 정확한 집계 함수를 쓰는 게 좋아요.

사용법 (Usage)

테이블의 내용을 요약하려면 SUMMARIZE 뒤에 테이블 이름을 붙이면 돼요.

SUMMARIZE tbl;

쿼리를 요약하려면 쿼리 앞에 SUMMARIZE를 붙이면 돼요.

SUMMARIZE SELECT * FROM tbl;

예제 (Example)

아래는 TPC-H SF1lineitem 테이블에 SUMMARIZE를 실행한 예시예요. 이 테이블은 tpch 확장으로 생성했어요.

INSTALL tpch; LOAD tpch; CALL dbgen(sf = 1);
SUMMARIZE lineitem;
column_name column_type min max approx_unique avg std q25 q50 q75 count null_percentage
l_orderkey INTEGER 1 6000000 1508227 3000279.604204982 1732187.8734803519 1509447 2989869 4485232 6001215 0.0%
l_partkey INTEGER 1 200000 202598 100017.98932999402 57735.69082650496 49913 99992 150039 6001215 0.0%
l_suppkey INTEGER 1 10000 10061 5000.602606138924 2886.9619987306114 2501 4999 7500 6001215 0.0%
l_linenumber INTEGER 1 7 7 3.0005757167506912 1.7324314036519328 2 3 4 6001215 0.0%
l_quantity DECIMAL(15,2) 1.00 50.00 50 25.507967136654827 14.426262537016918 13 26 38 6001215 0.0%
l_extendedprice DECIMAL(15,2) 901.00 104949.50 923139 38255.138484656854 23300.43871096221 18756 36724 55159 6001215 0.0%
l_discount DECIMAL(15,2) 0.00 0.10 11 0.04999943011540163 0.03161985510812596 0 0 0 6001215 0.0%
l_tax DECIMAL(15,2) 0.00 0.08 9 0.04001350893110812 0.025816551798842728 0 0 0 6001215 0.0%
l_returnflag VARCHAR A R 3 NULL NULL NULL NULL NULL 6001215 0.0%
l_linestatus VARCHAR F O 2 NULL NULL NULL NULL NULL 6001215 0.0%
l_shipdate DATE 1992-01-02 1998-12-01 2516 NULL NULL NULL NULL NULL 6001215 0.0%
l_commitdate DATE 1992-01-31 1998-10-31 2460 NULL NULL NULL NULL NULL 6001215 0.0%
l_receiptdate DATE 1992-01-04 1998-12-31 2549 NULL NULL NULL NULL NULL 6001215 0.0%
l_shipinstruct VARCHAR COLLECT COD TAKE BACK RETURN 4 NULL NULL NULL NULL NULL 6001215 0.0%
l_shipmode VARCHAR AIR TRUCK 7 NULL NULL NULL NULL NULL 6001215 0.0%
l_comment VARCHAR Tiresias zzle? furiously iro 3558599 NULL NULL NULL NULL NULL 6001215 0.0%

보시다시피 문자열 타입이면 min/max가 사전순 최소·최대값으로 나오고, 평균(avg) 같은 숫자 집계는 NULL로 채워져 있어요.

서브쿼리에서 SUMMARIZE 사용하기 (Using SUMMARIZE in a Subquery)

SUMMARIZEDESCRIBE처럼 서브쿼리로도 사용할 수 있어요. 요약 결과로 테이블을 만들 수도 있죠.

CREATE TABLE tbl_summary AS SELECT * FROM (SUMMARIZE tbl);

원격 테이블 요약하기 (Summarizing Remote Tables)

httpfs 확장을 사용하면 SUMMARIZE TABLE 문으로 원격 테이블을 요약할 수 있어요.

SUMMARIZE TABLE 'https://blobs.duckdb.org/data/Star_Trek-Season_1.csv';

더 알아보기 (Learn more)