DESCRIBE: 스키마 살펴보기

DESCRIBE: 스키마 살펴보기 (Describe - describe)

테이블이나 쿼리 결과의 스키마(구조)를 확인하고 싶을 때 DESCRIBE를 써요. 테이블의 컬럼 이름, 타입, 널 허용 여부, 키 정보까지 한눈에 볼 수 있답니다. 데이터를 다루기 전에 구조를 파악하는 데 아주 유용한 명령이에요.

출처: DuckDB 공식 문서 — describe

테이블 설명하기 (Describing a Table)

테이블의 스키마를 보려면 DESCRIBE 문(또는 그 별칭인 DESC, SHOW) 뒤에 테이블 이름을 붙이면 돼요.

CREATE TABLE tbl (i INTEGER PRIMARY KEY, j VARCHAR);
DESCRIBE tbl;
SHOW tbl; -- DESCRIBE tbl; 과 동일합니다
column_name column_type null key default extra
i INTEGER NO PRI NULL NULL
j VARCHAR YES NULL NULL NULL

여기서 i 컬럼은 PRIMARY KEY라서 keyPRI, nullNO로 표시되는 걸 볼 수 있어요.

쿼리 설명하기 (Describing a Query)

쿼리 결과의 스키마를 보려면 쿼리 앞에 DESCRIBE를 붙이면 돼요.

DESCRIBE SELECT * FROM tbl;
column_name column_type null key default extra
i INTEGER YES NULL NULL NULL
j VARCHAR YES NULL NULL NULL

여기서 주의할 점이 있어요. 테이블을 설명할 때와 결과가 미묘하게 달라요. 널 허용 여부(null)와 키 정보(key)가 사라져요. 쿼리 결과는 저장된 테이블이 아니니 당연히 키나 널 정보를 알 수 없는 거죠.

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

DESCRIBE는 서브쿼리로도 사용할 수 있어요. 이를 이용해 설명 결과로 테이블을 만들 수도 있어요.

CREATE TABLE tbl_description AS SELECT * FROM (DESCRIBE tbl);

원격 테이블 설명하기 (Describing Remote Tables)

httpfs 확장을 사용하면 DESCRIBE TABLE 문으로 원격 테이블을 설명할 수 있어요. 예를 들어요.

DESCRIBE TABLE 'https://blobs.duckdb.org/data/Star_Trek-Season_1.csv';
column_name column_type null key default extra
season_num BIGINT YES NULL NULL NULL
episode_num BIGINT YES NULL NULL NULL
aired_date DATE YES NULL NULL NULL
cnt_kirk_hookups BIGINT YES NULL NULL NULL
cnt_downed_redshirts BIGINT YES NULL NULL NULL
bool_aliens_almost_took_over_planet BIGINT YES NULL NULL NULL
bool_aliens_almost_took_over_enterprise BIGINT YES NULL NULL NULL
cnt_vulcan_nerve_pinch BIGINT YES NULL NULL NULL
cnt_warp_speed_orders BIGINT YES NULL NULL NULL
highest_warp_speed_issued BIGINT YES NULL NULL NULL
bool_hand_phasers_fired BIGINT YES NULL NULL NULL
bool_ship_phasers_fired BIGINT YES NULL NULL NULL
bool_ship_photon_torpedos_fired BIGINT YES NULL NULL NULL
cnt_transporter_pax BIGINT YES NULL NULL NULL
cnt_damn_it_jim_quote BIGINT YES NULL NULL NULL
cnt_im_givin_her_all_shes_got_quote BIGINT YES NULL NULL NULL
cnt_highly_illogical_quote BIGINT YES NULL NULL NULL
bool_enterprise_saved_the_day BIGINT YES NULL NULL NULL

URL 하나만으로 원격 CSV 파일의 스키마까지 이렇게 뽑아낼 수 있어요. 컬럼 이름들이 재미있죠? Star Trek 시즌 1 데이터라서 그렇답니다. 😄

더 알아보기 (Learn more)