SUMMARIZE: 데이터셋 빠르게 파악하기
SUMMARIZE: 데이터셋 빠르게 파악하기 (Summarize - summarize)
새로운 데이터셋을 받았을 때 전체를 다 훑어보지 않고도 "이 데이터가 대략 어떤 분포를 갖고 있지?"를 알고 싶을 때가 있어요. SUMMARIZE 명령은 테이블이나 쿼리에 대한 여러 집계(aggregate) 값을 한 번에 계산해줘서 데이터 감을 잡는 데 아주 좋아요.
개요 (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 SF1의 lineitem 테이블에 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)
SUMMARIZE는 DESCRIBE처럼 서브쿼리로도 사용할 수 있어요. 요약 결과로 테이블을 만들 수도 있죠.
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';