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..