덕디비를 적극적으로 활용해보려고, 이것 저것 해보고 있습니다. 덕디비에 대한 한국어 자료가 별로 없기도 하고, 아직까진 국내에서 유즈케이스가 크게 있진 않았습니다. 제가 지금 덕디비에 관심이 많은 이유는 여러가지가 있지만 가장 크게는 다음과 같습니다.
덕디비로 데이터파이프라인 구축을 계속해서 해볼 예정이지만, 가장 먼저 덕디비를 간단하고 쉽게 쓰면서 로컬에서 분석, 가공 환경을 조성하는 방법이 있어서 소개 드립니다. 이 방법이 제일 쓰기 쉽고, 좋다고 느껴졌습니다. 특히 DBeaver나 SQL 툴을 사용하고 계신 분들은 정말 추천드립니다.
먼저 이 방법은 실제 덕디비 파일을 생성하고, 그 파일을 저희의 로컬 데이터웨어하우스로 쓰는 방식입니다.
brew install duckdb
duckdb woody.duckdb
show all tables;
저는 루트 디렉토리에 woody.duckdb
파일을 만들었지만, 원하는 어느 곳에 파일을 저장하셔도 좋습니다.
그리고 덕디비를 빠져나오면, woody.duckdb
파일이 생성 되어있습니다.
데이터웨어하우스는 구축이 끝났습니다. 이제 덕디비 내부에 데이터를 집어넣고, 쿼리 엔진을 이용하면 됩니다. 물론 굳이 데이터를 저장하고 싶지 않다면, 분석 쿼리만 해도 됩니다.
실제 활용 사례를 보겠습니다. 앞으로의 모든 작업은 그저 Dbeaver의 SQL 에디터로 진행하시면 됩니다. 저는 해당 웨어하우스에 BRONZE
, SILVER
, GOLD
스키마를 만들어놓았습니다.
CREATE SCHEMA BRONZE;
CREATE SCHEMA SILVER;
CREATE SCHEMA GOLD;
그럼 S3에 적재된 데이터를 불러와보겠습니다. 액세스키와 시크릿키를 사용하는 방식으로 해보겠습니다. 먼저 익스텐션을 설치해야합니다.
INSTALL httpfs;
LOAD httpfs;
설치를 금방하셨다면, 이렇게 SECRET을 생성해줍니다. 버킷에 대한 권한은 AWS에서 먼저 세팅 되어야 합니다.
CREATE OR REPLACE SECRET STREAMIT_S3 (
TYPE S3,
KEY_ID '{AWS_ACCESS_KEY_ID}',
SECRET '{AWS_SECRET_ACCESS_KEY}',
REGION '{AWS_S3_REGION_NAME}'
);
잘 연결 하셨다면, 이제 S3에서 마음껏 데이터를 로드할 수 있습니다. 제가 가장 선호하는 방식은 이렇습니다.
CREATE OR REPLACE TABLE BRONZE.AREA AS
SELECT * FROM read_parquet('s3://{bucket_name}/abc/*.parquet', union_by_name = true);
먼저 read_parquet으로 읽는 경우 *.paruqet
이런 식으로 패턴식으로 찾을 수 있습니다. 그리고 union_by_name
파라미터가 True라면 스키마가 달라도, 컬럼 이름으로 데이터를 통합하기 때문에 없는 값은 NULL 처리해서 전부 다 로드합니다. 즉 스키마가 달라도, 통합된 데이터 형태를 얻을 수 있습니다.
저는 이렇게 데이터를 BRONZE
스키마에 넣어두었습니다.
그러면 제 로컬에 있는 데이터를 읽어 와서, 위의 AREA 테이블과 합친 후에, SILVER 스키마에 데이터를 만들어보겠습니다.
CREATE OR REPLACE TABLE BRONZE.cafe AS
SELECT nm, addr, phone, area_id
FROM read_parquet('/Users/woody/Downloads/cafe.parquet', union_by_name = true);
CREATE OR REPLACE TABLE SILVER.CAFE_AREA AS
SELECT
AREA.ID,
AREA.CITY_NAME,
AREA.COUNTY_NAME,
AREA.TOWN_NAME,
CAFE.ADDR,
CAFE.NM
FROM BRONZE.AREA
INNER JOIN BRONZE.CAFE
ON AREA.ID = CAFE.AREA_ID;
이런 식으로 잘 생성이 된 것을 확인할 수 있습니다.
AWS credential을 활용해서 시크릿을 관리한다면 이렇게 시크릿을 만들 수도 있습니다.
INSTALL aws;
LOAD aws;
CALL load_aws_credentials(redact_secret = false);
CREATE OR REPLACE SECRET S3 (TYPE S3, PROVIDER CREDENTIAL_CHAIN);
dbeaver
와 같이 사용하고 싶다면, 같은 터미널의 세션에서 인증과, Dbeaver 실행을 동시에 하시면 됩니다.
aws-vault exec ~
nohup dbeaver &
이 밖에도 ATTACH 활용을 통한 실제 데이터베이스 분석 쿼리 엔진으로의 덕디비 사용, 만들어진 덕디비를 BI툴의 임베디드 데이터웨어하우스로 사용, 람다에 덕디비 레이어를 만들어 Athena를 대체하는 식으로 사용, 클라우드 버전의 MotherDuck 사용, DBT와의 조합 등 무궁무진한 방식으로 사용할 수 있습니다.
최근에 나온 어떠한 기술 사례보다, 저는 이 덕디비가 가장 흥미로웠습니다. 소형 데이터웨어하우스의 확장성과, 잠재력에 계속해서 기대를 하고 있는 것 같습니다. 만약 조금 더 관심이 있으시다면, 공식문서와 블로그 글을 소개 해드립니다! 다음에는, DBT와 DuckDB, 그리고 MotherDuck을 통한 데이터 파이프라인 구축으로 포스팅 하겠습니다.
안녕하세요.
인사이트 출판사입니다.
DuckDB 관련 외서 번역을 의뢰드리고자 합니다.
메일 주소를 알려 주시면 세부 내용을 전달드리겠습니다.
감사합니다.