전체 글(55)
-
dbt(구조/모델/함수/테스트)
dbt 기본 구조dbt_project/├── models/ -- 핵심 디렉토리 ├── staging/ -- 원본 데이터를 그대로 가져와 컬럼명 정리 등 최소한의 정제만 수행 ├── marts/ -- 분석가, BI 도구가 바로 쓸 수 있는 최종 테이블 ├── intermediate/ -- staging을 조합해 중간 변환 단계 처리├── seeds/ -- 국가코드, 카테고리명 같은 소규모 정적 데이터를 CSV로 관리├── snapshots/ -- 데이터 변경 이력 관리(SCD), 과거 데이터 추적├── tests/ -- 기본 테스트 외에 직접 작성하는 커스텀 테스트 SQL├── macros/ -- 여러 모델에서 반복되는 로직을 함수처럼 정의해 재사용├── analyses/ -- ad-hoc..
2026.03.25 -
dbt(정의/등장배경/도입/ELT/작업 프로세스)
dbt (data build tool)데이터 웨어하우스 안에서 SQL을 사용해 데이터를 변환하는 도구버전 관리, 테스트, 모듈화와 같은 소프트웨어 개발 방식을 데이터 변환에 적용웨어하우스 내부에서 변환만 수행dbt Core(오픈소스)와 dbt Cloud(관리형 SaaS) 두 가지 버전이 있음웨어하우스?일반 DB(MySQL 등), 로그, CRM 등 여러 곳에 흩어진 데이터를 한 곳에 모아둔 저장소데이터 분석용으로 대용량 쿼리에 최적화대표적인 제품: BigQuery(Google), Snowflake, Redshift(AWS) dbt 등장배경데이터 파이프라인이 복잡해질수록, SQL 파일을 수동으로 관리하는 방식이 한계가 생김데이터 변환 작업을 소프트웨어 개발 수준으로 관리하기 위해 dbt 도입기존 문제db..
2026.03.25 -
윈도우 함수(프레임절)
1. 프레임절현재 행을 기준으로 계산에 포함할 행의 범위를 정의 2. 윈도우 함수 기본 구조SUM(A) OVER (PARTITION BY B ORDER BY C {ROWS | RANGE | GROUPS} BETWEEN {시작} AND {끝})# 함수 OVER ( 파티션절 정렬절 프레임절 )파티션절: 그룹 분리정렬절: 순서 기준프레임절: 범위 지정 3. 프레임절 키워드3.1. 프레임절의 첫 번째 키워드어떤 단위로 범위를 셀 것인가를 결정명칭ROWSRANGEGROUPS기준물리적 행 번호ORDER BY 값 범위동일값 묶음(그룹)설명동일값 있어도 각 행 개별 취급동일값 행들은 모두 같이 포함그룹 단위로 N번째 앞/뒤 지..
2026.03.23 -
데이터 검수 패턴 훑기
1. NULL 비율 체크데이터 적재 오류, 수집 누락 감지 등에 사용email과 phone 각각의 전체 수, NULL 수, fill_rate(%) 를 한 번에 출력하세요.출력 컬럼: column_name, total, null_count, fill_rate힌트: UNION ALL로 두 컬럼을 행으로 변환SELECT 'email' AS column_name, COUNT(*) AS total, COUNT(*) - COUNT(email) AS null_count, ROUNT(COUNT(email) * 100.0 / COUNT(*), 2) AS file_rateFROM usersUNION ALLSELECT 'phone' AS column_name, COUNT(*) AS total..
2026.03.22 -
CTE 연습
1. CTE를 사용해서 각 고객별 총 주문금액을 구하고, 그 중 총 주문금액이 5000 이상인 고객만 출력하세요.# 내 풀이WITH customer_amount AS ( SELECT customer_id, SUM(amount) OVER (PARTITION BY customer_id) total_amount FROM orders)SELECT customer_id, total_amountFROM customer_amountWHERE total_amount >= 5000;# 정답WITH customer_amount AS ( SELECT customer_id, SUM(amount) AS total_amount FROM orders GROUP BY customer_id)SELECT cu..
2026.03.20 -
CTE(Common Table Expression)
Common Table ExpressionCommon : 여러 곳에서 공통으로 쓸 수 있는Table Expression : 테이블처럼 생긴 결과값 CTE 나오기 전1. 서브쿼리 사용서브쿼리 중복 및 가독성 문제 발생SELECT item_id, total_priceFROM ( SELECT item_id, SUM(price) AS total_price FROM items GROUP BY item_id) sWHERE total_price > ( SELECT AVG(total_price) FROM ( SELECT item_id, SUM(price) as total_price FROM items GROUP BY item_id ) s2); 2. ..
2026.03.20