본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
EPL과 유튜브 데이터로 배우는 DuckDB

DuckDB의 더 친숙한 SQL - Part 4

by 아참형인간 2026. 6. 7.

 

https://product.kyobobook.co.kr/detail/S000220221456

 

LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 이기준 - 교보문고

LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 복잡한 데이터 분석 흐름을 더 단순하게 만드는 DuckDB 최근 주목받고 있는 DuckDB를 활용해 SQL 기반 데이터 분석과 실전 프로젝트를 학습할 수 있도록 구

product.kyobobook.co.kr

 

다른 데이터베이스의 함수 별칭 지원

DuckDB는 다른 데이터베이스 시스템과의 호환성을 높이기 위해 많은 함수에 대해 여러 이름을 지원한다. 결국 오리는 꽤 다재다능한 동물이다. 날 수도 있고, 헤엄칠 수도 있으며, 걸을 수도 있다.

가장 일반적으로는 PostgreSQL의 함수 이름을 지원하며, SQLite의 함수 이름도 다수 지원한다. 그 외 다른 데이터베이스 시스템의 함수 이름도 일부 지원한다. 만약 기존 워크로드를 DuckDB로 이전하는 과정에서 특정 함수 이름의 별칭이 필요하다면 언제든지 요청할 수 있다. 함수의 동작이 동일하다면 추가하는 것은 매우 간단하다. 자세한 내용은 함수 문서를 참고하기 바란다.

SELECT
    'Use the Force, Luke'[:13] AS sliced_quote_1,
    substr('I am your father', 1, 4) AS sliced_quote_2,
    substring('Obi-Wan Kenobi, you''re my only hope', 17, 100) AS sliced_quote_3;

중복 컬럼명 자동 증가

유사한 테이블을 조인하는 쿼리를 작성하다 보면 동일한 이름의 컬럼이 자주 등장한다.

최종 결과를 반환하는 쿼리라면 DuckDB는 별다른 수정 없이 중복된 컬럼명을 그대로 반환한다. 하지만 해당 결과를 새로운 테이블로 생성하거나, 서브쿼리 또는 CTE 내부에서 사용하는 경우에는 상황이 다르다. 다른 데이터베이스에서는 일반적으로 허용되지 않는 중복 컬럼명을 DuckDB가 자동으로 수정해 준다.

DuckDB는 반복되는 컬럼명에 새로운 이름을 자동으로 부여하여 쿼리 작성과 프로토타이핑을 더욱 쉽게 만들어 준다.

SELECT
    *
FROM (
    SELECT
        s1.tie_fighter,
        s2.tie_fighter
    FROM squadron_one s1
    CROSS JOIN squadron_two s2
) theyre_coming_in_too_fast;

결과:

tie_fighter tie_fighter:1
green_one green_two

 


암시적 타입 변환

DuckDB는 성능을 위해 명확한 데이터 타입 사용을 권장하지만, 필요할 경우 타입 간 변환을 자동으로 수행한다.

예를 들어 정수형 컬럼과 문자열 컬럼을 조인할 때 DuckDB는 두 컬럼을 자동으로 동일한 타입으로 변환한 후 조인을 수행한다.

또한 LIST나 IN 표현식에 여러 타입이 혼합되어 있더라도 자동으로 적절한 타입 변환이 이루어진다.

추가로 INTEGER와 BIGINT는 사실상 동일하게 사용할 수 있다. DuckDB의 최신 저장소 압축 기능 덕분에 대부분의 경우 BIGINT를 사용하더라도 추가 저장 공간이 거의 필요하지 않다.

따라서 데이터를 최적의 타입으로 저장하면서도 편리하게 사용할 수 있다.

CREATE TABLE sith_count_int AS
SELECT 2::INTEGER AS sith_count;

CREATE TABLE sith_count_varchar AS
SELECT 2::VARCHAR AS sith_count;
SELECT
    *
FROM sith_count_int s_int
JOIN sith_count_varchar s_char
  ON s_int.sith_count = s_char.sith_count;

결과:

sith_count sith_count
2 2

 


기타 사용자 친화적인 기능

DuckDB에는 SQL을 사용한 데이터 분석을 더욱 쉽게 만들어 주는 다양한 기능이 존재한다.

DuckDB는 시간 데이터를 다루는 작업을 더욱 편리하게 만들기 위해 여러 데이터베이스에서 사용하는 다양한 INTERVAL 문법을 지원한다. 이를 통해 기간이나 시간 길이를 지정하는 작업이 훨씬 유연해진다.

또한 전통적인 SQL 핵심 절 이외에도 여러 유용한 SQL 절을 구현하고 있다.

SAMPLE 절은 데이터의 무작위 일부를 빠르게 추출할 수 있게 해준다.

QUALIFY 절은 윈도우 함수의 결과를 필터링할 수 있게 해준다. 이는 집계 함수에 대한 HAVING 절과 유사한 역할을 수행한다.

마지막으로 DISTINCT ON 절은 SELECT 절의 특정 컬럼 조합에 대해서만 고유성을 판단하면서, 고유성 검사에 포함되지 않은 나머지 컬럼에 대해서는 첫 번째 행의 값을 반환할 수 있도록 해준다.

이러한 기능들은 DuckDB가 단순히 빠른 분석 데이터베이스를 넘어, SQL 자체를 더욱 편리하고 생산적으로 사용할 수 있도록 설계되었음을 보여준다.

 

<출처: https://duckdb.org/2022/05/04/friendlier-sql>

댓글