dbt 쿼리 모델 중 현재 시각을 사용한 처리가 로직에 포함될 수 있습니다. 쿼리에서 사용되는 Jinja 문법과 SQL 내장 함수의 시간 표기 기준이 다르게 동작하는 상황이 있습니다. 이번 글에서는 현재 시각을 표기하는 방식 차이와 타임존을 반영에 대한 dbt 커뮤니티 현황을 공유합니다.1. current_date vs run_started_at 비교expressionquerytimezonedescriptioncurrent_timestampselect current_timestamp세션 기준 Trino가 사용하는 세션의 타임존 기준 시각run_started_atselect {{ run_started_at }}UTC 고정UTC 기준 쿼리 실행 시작 시각Trino 세션이 Asia/Seoul로 설정되어 있을 ..
Apache Spark를 사용하면서 Driver와 Executor의 역할을 명확히 이해하는 것은 매우 중요합니다. 특히 YARN을 클러스터 매니저로 사용할 때, Driver와 Executor가 어디에서 실행되는지, 어떤 코드가 어디에서 수행되는지 혼동하기 쉽습니다. 이번 글에서는 Driver와 Executor의 역할에 대해서 복습하고 Spark on YARN의 실행 구조와 환경변수를 올바르게 설정하는 방법까지 정리해보겠습니다. Spark의 핵심 컴포넌트: Driver와 ExecutorDriver란?Driver는 Spark 애플리케이션을 관리하는 컨트롤러 역할을 합니다. 사용자가 spark-submit을 실행하면 Driver가 시작되며, 다음과 같은 역할을 수행합니다.SparkSession (SparkCo..
데이터 엔지니어링에서 dbt (Data Build Tool)는 데이터 변환과 모델링을 자동화하는 강력한 도구입니다. 특히 SQL 기반의 데이터 모델링을 체계적으로 관리하고, 변환 파이프라인을 효율적으로 구축할 수 있도록 돕습니다. 이번 포스트에서는 sql 모델, 검증을 구현하는 예시와 데이터 처리 방식과 연관된 몇가지 설정을 소개합니다.필요한 파일1. YAML 파일 (.yml)모델 설정: 모델의 메타데이터 및 설정을 정의합니다.테스트: 데이터 무결성을 검증하는 테스트를 추가할 수 있습니다.2. SQL 파일 (.sql)최종 SELECT 절을 반드시 포함해야 합니다.models 하위 디렉토리에 테이블명과 동일한 SQL 파일을 생성하여 관리합니다.모델 명세모델 파일({model}.sql) 상단에서 config..
Kubernetes 환경에서 배포된 어플리케이션이 빈번하게 형상 업데이트가 일어나는 소스 기반이라면 이를 동기화하는 방법이 필요합니다.수동으로 소스 변경사항이 있을때마다 수동으로 배포를 진행할수도 있고 인스턴스단에서 소스를 불러 오는 방식 등 다양한 방법이 있습니다. 이 중 대표적인 방법으로 GitSync와 ArgoCD 를 활용한 방식을 비교해보겠습니다. 1. GitSyncGitSync는 Kubernetes 내에서 특정 소스의 변경 사항을 주기적으로 동기화하는 방식입니다. 1) Pod에서 주기적으로 소스 저장소의 변경사항을 감지합니다 (1m, 3m..설정된 간격)2) 변경 사항이 감지되면 이를 애플리케이션에 적용합니다.3) 필요한 Pod에 GitSync 사이드카 컨테이너를 추가하여 동기화할 수 있습니..
이 글에서는 cursor의 개념을 되짚어보고, 데이터베이스 내부의 cursor와 Python에서 사용하는 cursor 간의 공통점과 차이점을 살펴봅니다. 또한 쿼리 엔진에 접속하는 방식의 통신, 로깅 차이를 짧게 비교했습니다. 마지막으로 연결 자원을 효과적으로 사용하는 방법과 연결 관리를 위한 주요 기법을 정리합니다.데이터베이스 Cursor 개념 비교Python 프로젝트에서 데이터베이스 질의를 위해 사용하는 cursor 객체는 데이터베이스 내부에서의 cursor와 개념적으로 유사하지만, 동작 환경과 관리 주체에서 차이가 있습니다.공통점쿼리 실행 및 결과 순회: 두 cursor 모두 SQL 쿼리를 실행하고, 결과 집합을 순회하거나 조작하는 데 사용됩니다.상태 관리: 쿼리 실행 결과를 추적하고, 결과의 위치..
이 글을 읽는 대상: 데이터 분석가, 여러 쿼리 엔진을 사용하는 데이터 엔지니어 최근 Impala를 사용하면서 나누기 연산에 대한 결괏값의 소수점 자릿수와 관련해 예상과 다른 값이 나오는 상황을 겪었습니다. 원인을 찾아본 경험을 공유하며, 비슷한 문제를 겪는 분들에게 참고가 될 수 있길 바랍니다.문제 상황: 예상치 못한 소수점 자리수DECIMAL(38, 2) 타입인 칼럼값을 BIGINT형 값으로 나눌 시 결괏값 타입이 DECIMAL(38, 2)가 아닌 DECIMAL(38, 6)으로 반환되는 상황을 확인했습니다. 연산 결과 값 타입 확인쿼리 엔진연산 식결과값결과값 타입IMPALACAST(3482477 AS DECIMAL(38, 2)) / 30386114.607944DECIMAL(38, 6) 원인 분석: I..
11/17 글또에서 진행된 글쓰기 세미나를 듣고 나의 상황에 맞는 글쓰기 전략에 대해서 생각해 볼 수 있었다.1. 내가 글쓰는 패턴 파악하기이번까지 4회의 글쓰기를 제출하면서 확인한 패턴은 다음과 같았다.글을 어찌저찌 제출하고 '다음에 더 잘 써야지'라는 다짐한 이후그다음 주 주말: 아직 일주일 남았네. 무슨 주제로 쓸지 모르겠다~ 더 생각해 보면 멋진 글을 쓸 주제가 나오겠지^^전날 성윤님의 '내일이 마감인 거 아시죠? 모두 파이팅입니다'라는 쓰레드를 보고 벌써 마감일이라고?노트 앱을 뒤적이고 뒤늦게 주제 찾기당장 학습해서 써봤자 경험을 녹여 쓰지도 못해서 다시 안 읽을거라는 걸 이제는 깨달음껄무새 '그때 써둘걸.. 그때 생각해 둘걸.. 그때 공부해 둘걸!'당일 작성하기 전까지 근자감글 쓰기 시작부터 ..
대용량 데이터 처리에 쓰일 수 있는 분산 SQL 엔진 중 대표적인 Trino에 대해서 알아봅니다.Trino는 Facebook에서 개발된 Presto SQL에서 파생된 프로젝트입니다. 대규모 데이터셋에 대한 분산 SQL 쿼리를 제공하는 아키텍처이며 코디네이터-워크 노드로 구성되어 있습니다.아키텍처Trino 아키텍처는 크게 두 핵심 요소가 있습니다.코디네이터워커 노드코디네이터(Coordinator)쿼리 수신, 계획 수립, 작업 분배 및 전체적인 쿼리 진행을 관리하는 중심 역할을 합니다.1. 쿼리 파싱 및 분석사용자가 실행한 SQL 쿼리를 수신한 후, 이를 파싱 하여 구문을 분석합니다.쿼리 문법과 구조를 분석하여 쿼리 실행이 가능한지 확인하고, 최적화된 실행 계획을 수립합니다.2. 실행 계획(Execution..
Python에서 with 구문은 내용을 열어서 사용할때, Airflow DAG를 정의할때 등...자연스럽게 코드에서 찾을 수 있습니다. 어떤 포인트 때문에 with와 붙여서 사용하는건지 정리해보면 python의 장점을 잘 활용할 수 있습니다. with 구문은 자원(파일, 네트워크 연결, DB 연결 등)의 관리를 간소화하고 안전하게 수행할 수 있도록 돕는 표현입니다. 특히 파일 작업이나 Airflow의 DAG과 같이 반드시 자원을 닫아야 하는 상황에서 유용하며, 코드의 가독성을 높이는 데도 큰 역할을 합니다. 이 글에서는 그 개념과 사용법, 그리고 유용한 활용 예제를 통해 with 구문이 왜 중요한지 알아보겠습니다.공식문서는 'with문은 context manager 객체의 제어를 받아서 임시로 conte..
지난 기수 회고와 글쓰기에 대해서개발 글쓰기 모임이라는 울타리 안에서 다양한 소모임을 통해 많은 배움과 재미를 느낄 수 있었습니다. 우선 빌리지 채널에서는 데이터 엔지니어 직군은 같은 이름이더라도 회사마다 업무 범위가 다를 수 있다는 걸 직접 이야기하면서 알 수 있었습니다. 그래도 ETL, ELT 큰 틀을 가지고 파이프라인을 구축하는 부분은 공통적이고 커리어 고민도 나눌 수 있어서 좋았습니다. 그 당시에는 '이게 고민인가?'라는 것부터 고민이었는데 같은 직군 비슷한 연차인 분들과 이야기 나눌 수 있는 시간 덕분에 마음이 가벼워졌습니다. 참여했던 가장 큰 목적이었던 글쓰기를 생각해 보면 주기적으로 기술 관련 글을 쓸 수 있었습니다. 다만 아쉬운 건 글을 급하게 제출했던 점이 마칠 때 아쉬웠습니다. 특히 중..