본문 바로가기

세계정복의주인장

(1227)
GNU date bug MySQL → BigQuery 적재 작업을 6시간 윈도우(0~6, 6~12, 12~18, 18~24)로 돌리려 했는데, 실제 실행 로그는 00~04, 06~10처럼 4시간 간격으로 잘렸습니다. #!/bin/bashset -x# ────────────────────────────────# 0~6, 6~12, 12~18, 18~24 (총 4회)# 마지막 구간은 오늘 날짜 테이블에 append# ────────────────────────────────YESTERDAY_DATE=$(date -d "yesterday" "+%Y-%m-%d")YESTERDAY=$(date -d "yesterday" "+%Y%m%d")TODAY_DATE=$(date "+%Y-%m-%d")TODAY=$(date "+%Y%m%d")s..
3. Airflow + Astronomer Cosmos + dbt airflow + dbt를 테스트한 dag의 모습입니다.dbt 초기엔 Airflow에서 BashOperator 하나로 dbt run/dbt test를 돌리며, GCS→BigQuery 적재는 staging/mart 두 계층으로 나눠 관리했습니다.문제는 빌드가 실패했을 때 어느 모델에서 깨졌는지 빠르게 추적하기 어렵고, retry도 잡 전체를 다시 돌려야 한다는 점이었습니다.Cosmos를 붙이면 Airflow 그래프에 dbt 모델이 각각의 태스크로 나타나니,실패 지점이 정확히 어느 모델인지 즉시 보이고,그 모델만 부분 재시도 / 부분 실행(select) 할 수 있어 운영이 쉬워집니다. 왜 Cosmos?Airflow에서 dbt 모델을 개별 태스크로 쪼개서 보이고, 의존성 그래프도 자동 생성 → 문제 지점 파악..
Trino로 서로 다른 DB 조인하기 (MySQL ↔ PostgreSQL) 이 글은 Trino를 이용해 서로 다른 데이터베이스(여기서는 MySQL과 PostgreSQL)를 하나의 쿼리로 조인하는 최소 예제를 그대로 따라 할 수 있도록 정리했습니다. trinoTrino는 여러 저장소(예: MySQL, PostgreSQL, Hive, BigQuery 등)에 흩어진 데이터를 단일 SQL로 다룰 수 있게 해 주는 분산 쿼리 엔진입니다. 이기종 조인: postgresql.sales.orders와 mysql.crm.customers처럼 서로 다른 시스템의 테이블을 직접 조인할 수 있습니다.커넥터-카탈로그 모델: Trino는 커넥터를 통해 외부 시스템에 접속하며, 각 커넥터 인스턴스를 카탈로그로 노출합니다. 중요 제약: 트랜잭션을 시스템으로 보장하지 않습니다. 또한 조인 시 네트워크 I..
MySQL id 범위 조건 하나로 10분 → 2분 시간대 필터만 있는 쿼리와 id 조건을 함께 건 쿼리의 실행 시간이 극적으로 달랐습니다. 같은 테이블에서 같은 시간 범위를 조회했지만, 전자는 10분이 넘었고 후자는 2분도 걸리지 않았습니다. 문제 상황두 쿼리는 선택 컬럼과 시간 범위가 동일합니다. 차이는 id 조건의 유무입니다.-- A 조건explainSELECT id, user_id, lotto_round_id, lottery_numbers, created_atFROM lotto_lotteriesWHERE created_at >= '2025-05-22 00:00:00' AND created_at -- B 조건explainSELECT id, user_id, lotto_round_id, lottery_numbers, created_atFRO..
elastic search ingest 이 글은 Elasticsearch에서 Ingest Pipeline을 이용해 색인 전에 로그를 전처리하고, 이를 단건 색인과 벌크 색인에 적용하는 예시이다. Ingest 파이프라인 정의Logstash 없이도 간단한 파싱과 정규화를 클러스터 내부에서 처리해, 인덱스 스키마를 안정적으로 유지 할 수 있다.수집한 로그를 색인 전에 일관된 스키마로 가공한다. 예제 파이프라인은 다음을 수행한다.message가 JSON이면 루트로 펼친다(json).색인 시각을 ingested_at에 기록한다(set).문자열 log_time을 @timestamp로 변환한다(date).user_agent를 구조화한다(user_agent).client_ip로 GeoIP 정보를 붙인다(geoip).숫자형이 필요한 필드를 변환한다(con..
2. airflow + dbt 이 예제는 개발(로컬/경량)–운영(클라우드/규모) 분리를 전제로 한다.개발/속도: DuckDB 어댑터로 빠르게 모델을 검증하고, seed·단위테스트 중심으로 피드백 루프를 짧게 한다.운영/확장: BigQuery를 타깃으로 외부 테이블(원천: GCS) → staging → mart의 표준 3계층을 구축한다. 스토리지-컴퓨트 분리를 활용해 대용량에도 비용/성능 균형을 맞춘다. 디렉토리 구조 airflow-dbt-demo/├─ docker-compose.yml├─ .env ├─ airflow/│ ├─ Dockerfile│ ├─ requirements.txt│ ├─ dags/│ └─ dbt_duckdb_demo.py└─ dbt/ └─ demo_dbt/ ..
1. dbt tutorial 왜 dbt인가, 그리고 언제 써야 하나데이터 팀은 보통 원천 데이터를 웨어하우스로 옮긴 뒤 SQL로 정제하고, 지표를 만들어 대시보드·분석에 제공합니다. 이 과정이 커질수록 SQL 스크립트가 여기저기 흩어지고, 의존성·버전관리·테스트가 어려워집니다. dbt(Data Build Tool) 는 이 문제를 해결하기 위한 표준 도구입니다.SQL 변환을 코드로 관리하고, ref()로 의존 그래프를 안전하게 만들며, 테스트·문서화·라인리지를 자동화합니다. PR 기반 협업과 CI/CD도 용이합니다.다음을 기준으로 사용하면 좋습니다.웨어하우스(BigQuery/Snowflake/Redshift/DuckDB 등) 안에서 SQL 기반 변환을 할 때모델 수가 늘어나 의존성/품질 관리가 중요할 때대시보드 지표 정의를 코드로 명..
[논문] Presto: SQL on Everything / A Decade of SQL Analytics at Meta / History-based Query Optimizer https://trino.io/Presto_SQL_on_Everything.pdfhttps://www.vldb.org/pvldb/vol17/p4077-shankhdhar.pdfhttps://scontent-icn2-1.xx.fbcdn.net/v/t39.8562-6/338697424_1576642486169536_1067048833935401645_n.pdf NTRODUCTION Presto(프레스토)는 Meta(메타, 이전 Facebook)에서 개발되어 2012년에 프로덕션에 도입된 오픈 소스 분산 SQL 쿼리 엔진입니다. 현재 Uber, Netflix, Alibaba, Bloomberg, LinkedIn 등 여러 대기업에서 사용되고 있으며, Amazon Athena와 같은 서비스의 기반으로 활용되기도 ..