1. 들어가며SQL을 공부하거나 실무에서 데이터를 다루다 보면가장 자주 사용하면서도 의외로 헷갈리는 개념이 JOIN입니다.JOIN은 여러 테이블을 연결해 하나의 결과로 합치는 기능이며,데이터베이스에서 관계형 모델을 사용하는 이유와도 직결됩니다. 아는 것 같으면서도 막상 복잡한 쿼리를 보면 머릿속이 어지러워지기 때문에이번 글에서는 JOIN을 최대한 단순한 관점에서 정리하고자 합니다.2. JOIN이 필요한 이유관계형 데이터베이스는 데이터를 테이블 단위로 나누어 저장합니다. 예를 들어,사용자 정보는 users주문 정보는 orders이렇게 저장됩니다.이 구조의 장점은 중복을 줄이고 데이터 정합성을 유지하기 쉽다는 점입니다.그러나 데이터를 분석할 때는 보통 한 테이블만으로는 충분하지 않습니다. 예시로,“어떤 사용..
🎯 들어가며데이터를 단순히 “수집해서 저장”하는 것만으로는 충분하지 않습니다.시간이 지나면서 데이터는불필요한 중복이 생기고,컬럼 구조가 바뀌고,새로운 데이터가 섞이고,정제되지 않은 상태로 쌓이게 됩니다.결국 데이터가 많아질수록, “신뢰할 수 있는 분석용 데이터”를 유지하기가 어려워집니다.그래서 필요한 게 바로 ETL 파이프라인(Extract, Transform, Load) 입니다.이번 글에서는 그 개념과 함께, 실무에서 많이 쓰이는 두 도구 Airflow와 dbt를 중심으로ETL 구조를 어떻게 설계할 수 있는지에 대한 내용을 정리했습니다.🧩 1. ETL이란 무엇인가ETL은 데이터를 “흐르게 만드는 기본 구조”입니다.단어 그대로,Extract (추출) — 데이터를 여러 곳에서 모으고Transform (..
🎯 들어가며요즘 대부분의 팀이 데이터를 구글 시트에서 관리합니다.처음엔 간단하고 협업하기도 편하지만, 데이터가 쌓이기 시작하면 관리가 점점 어려워집니다.시트마다 컬럼이 다르고수식이 꼬이거나데이터가 많아지면 속도가 느려지고결국 “데이터를 믿기 어려운 순간”이 오고는 합닏.그래서 저는 이번 글에서“데이터를 수집하고, 저장하고, 자동화할 수 있는 구조로 한 단계 옮기는 과정”을 기록해보려고 합니다.그 시작이 바로 ‘구글 시트 → BigQuery’ 데이터 이전입니다.🧩 1. 왜 BigQuery로 옮길까?BigQuery는 구글 클라우드에서 제공하는 데이터 웨어하우스입니다.쉽게 말하면 “데이터를 안전하게 쌓고, 빠르게 조회할 수 있는 창고”입니다.구글 시트로는 보기 어렵던 다음과 같은 일들이 가능해집니다.수십만..
스키마 설계 및 데이터 구조스키마 설계와 데이터 구조는 데이터베이스의 목적과 사용 방식에 따라 효율적인 구조를 설계하는 과정입니다. 일반적으로 Star Schema, Snowflake Schema와 같은 구조는 데이터 웨어하우스나 분석용 데이터베이스에서 사용되며, OLTP와 OLAP는 각기 다른 데이터 처리 방식에 특화된 시스템입니다.Star Schema와 Snowflake SchemaStar Schema와 Snowflake Schema는 주로 데이터 분석을 위한 데이터베이스 구조에 사용됩니다. 이 두 구조는 분석 성능과 저장 공간 효율성을 중점적으로 고려하여 설계됩니다.1) Star Schema개념: 중심에 사실 테이블(Fact Table)을 두고, 주변에 차원 테이블(Dimension Table)을 ..
정규표현식SQL에서 정규표현식(Regular Expression, RegEx)은 문자열 데이터를 처리하거나 특정 패턴을 검색, 매칭, 치환하는 데 유용한 기능입니다. SQL의 정규표현식은 데이터베이스 엔진에 따라 지원 방식과 기능이 조금씩 다릅니다.SQL에서 정규표현식을 지원하는 주요 함수REGEXP_LIKE(): 특정 패턴과 일치하는지 확인.REGEXP_REPLACE(): 특정 패턴을 찾아 치환.REGEXP_SUBSTR(): 특정 패턴과 일치하는 하위 문자열 반환.REGEXP(): WHERE 절에서 패턴 매칭 (MySQL 8.0 이전).주요 정규표현식 함수1) REGEXP_LIKE()문자열이 특정 정규표현식 패턴과 일치하는지 확인합니다.SELECT column_nameFROM table_nameWHER..
PIVOT과 UNPIVOT은 SQL에서 데이터 형식을 변환하거나 재구성하는 데 사용되는 구문입니다. 이 구문은 데이터를 분석할 때 가독성과 효율성을 높이기 위해 열과 행을 변환하는 데 매우 유용합니다.PIVOTPIVOT은 행 데이터를 열로 변환하여 데이터를 요약하고 구조를 재구성할 때 사용됩니다.기본 구문SELECT *FROM table_namePIVOT ( aggregate_function(value_column) FOR pivot_column IN (value1, value2, value3, ...)) AS pivot_table;aggregate_function: 데이터를 요약하는 집계 함수 (예: SUM, AVG, COUNT 등).pivot_column: 행 데이터를 열로 변환할 기준이 ..
SQL에서는 데이터의 계층적 구조나 자기 참조 관계를 처리하기 위해 계층형 질의와 셀프 조인을 자주 사용합니다. 두 기법은 상위-하위 관계를 다루거나 같은 테이블 내에서 행 간의 관계를 정의하는 데 유용합니다.계층형 질의(Hierarchical Query)계층형 질의는 부모-자식 관계와 같은 계층 구조 데이터를 조회할 때 사용됩니다. 데이터의 상위-하위 관계를 표현하고 탐색하기 위해 주로 재귀적 CTE(MySQL)나 CONNECT BY(오라클)를 사용합니다.계층형 질의의 구성 요소와 키워드부모-자식 관계:데이터의 상위 계층과 하위 계층이 명확히 정의된 구조.예: 직원-관리자 관계, 부서-상위 부서 관계.재귀적 CTE:MySQL 8.0 이상에서 지원.WITH RECURSIVE와 UNION ALL을 사용해 ..
Top N 쿼리Top N 쿼리는 SQL에서 데이터의 상위 N개를 조회할 때 사용되며, 순위 기반 조회에 자주 활용됩니다. SQL에서 이러한 쿼리를 작성하는 데 사용되는 함수로는 ROWNUM과 윈도우 함수의 순위 함수인 RANK, DENSE_RANK, ROW_NUMBER가 있습니다.ROWNUMROWNUM은 각 행에 고유한 순번을 부여하여, 특정 조건을 만족하는 상위 N개의 데이터를 조회할 때 사용합니다. 단, 오라클에서만 사용 가능한 함수입니다. ROWNUM은 쿼리가 실행되는 순서에 따라 행에 번호를 부여하므로, 일반적인 ORDER BY와 함께 사용할 경우 원하는 대로 동작하지 않을 수 있습니다. 기본 구문:SELECT column1, column2, ...FROM table_nameWHERE ROWNUM..
