전체 글
-
SQL 스타일 가이드DB 2022. 1. 16. 17:27
개요 SQL 스타일을 통일시켜 직관적인 SQL 코드를 짜고 읽을 수 있도록 합니다. mordern sql style guide를 기반으로 깃랩, 모질라 문서를 참고하여 정리했습니다. ‼️가 붙어 있는 부분은 lint가 적용되지 않아 개개인이 주의해야 되는 부분입니다. Case 네이밍에는 문자, 숫자, _ 만 사용합니다. 네이밍의 시작은 문자로 시작하고 _로 끝나지 않습니다. 테이블 명의 최대 길이는 20자입니다. 한 줄에 표현할 수 있는 쿼리의 길이는 100자입니다. 탭은 사용하지 않고 공백만 사용합니다. jetbrains 제품을 사용한다면 탭을 공백으로 변환하도록 합니다. 쿼리 내 들여쓰기는 4칸 들여쓰기로 합니다. 필드 네이밍 필드 이름은 모두 소문자로 제공하며 스네이크 케이스를 지향합니다. (카멜케..
-
[Bigquery] Resources exceeded during query execution: The query could not be executed in the allotted memory 해결 방법DB/Bigquery 2022. 1. 16. 17:06
원인 bigquery에서 쿼리를 실행하면 아래와 같은 오류가 발생하는 경우가 종종 있습니다. Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 140% of limit. Top memory consumer(s): ORDER BY operations: 98% other/unattributed: 2% bigquery는 분산 데이터베이스 기반으로 쿼리 대부분이 여러 노드에서 실행되지만 계산이 필요한 특정 명령어의 경우에는 단일 노드에서 실행이 되어야 합니다. 이 때, 단일 노드에서 너무 많은 데이터를 처리하려 하면 위와 같이 오류가 발생합니다. bigquery는 ..
-
[Airflow] DAG에서 다른 DAG 호출하기 (DAG 종속성)공부/데이터 2021. 11. 20. 20:43
dag를 설계할 때 dag끼리 종속성을 갖지 않는 것이 가장 좋지만 어쩔 수 없이 종속성을 만들어야 하는 경우가 있습니다. 아래와 같은 상황일 때, dag의 종속성을 갖는 것이 유용하게 사용됩니다. 두 dag는 종속되지만 일정이 다름 두 dag는 종속되지만 서로 다른 팀에서 소유 task는 다른 task에 종속되지만 execution_date가 다름 여기서는 dag에서 다른 dag를 호출하는 방법을 설명합니다. SubDAG를 사용하여 DAG 종속성을 처리할 수도 있지만 SubDAG가 성능 문제를 일으킬 수도 있으므로 dag 종속성으로 처리하는 것을 권장합니다. TriggerDagRunOperator TriggerDagRunOperator는 dag의 종속성을 구현하는 쉬운 방법입니다. 해당 operator..
-
[Airflow] custom operator, hook, sensor, util 등록하기공부/데이터 2021. 11. 14. 20:02
plugins 분리하기 실제 동작하는 dag와 custom으로 생성한 operator, hook, alert 등의 작업물을 분리하여 관리하는 방법입니다. https://airflow.apache.org/docs/apache-airflow/stable/modules_management.html 문서에 나와있는 것처럼 plugins 폴더 하위에 작성하면 airflow가 자동으로 경로를 인식합니다. /plugins/operators/custom_operator.py 폴더와 파일을 만들고 아래 코드를 추가합니다. from airflow.operators.bash import BashOperator class EvenNumberCheckOperator(BashOperator): def __init__(self, ..
-
[Airflow] Taskflow API공부/데이터 2021. 11. 13. 19:45
버전 2.X대에서 도입된 Taskflow API를 사용하여 데이터 파이프라인 튜토리얼을 설명하면서 기존 1.X대 버전과 비교를 해봅니다. Taskflow API taskflow는 간단하게 데코레이터를 사용해 DAG와 Task를 구성하는 방식입니다. 전체 코드 import json from airflow.decorators import dag, task from airflow.utils.dates import days_ago default_args = { 'owner': 'airflow', } @dag(default_args=default_args, description='Taskflow API ETL DAG tutorial', schedule_interval=None, start_date=days_ago..
-
[Airflow] Test공부/데이터 2021. 11. 13. 18:03
스크립트 실행 만든 스크립트에 문법적 오류가 없는지 확인을 하기 위해 스크립트를 실행해 봅니다. 만약 예외가 발생하지 않았다면 어느 정도 문법적인 오류가 없다라고 볼 수 있지만 스크립트 특성 상, 호출되지 않은 함수 내의 문법적 오류는 존재할 수 있습니다. 명령어를 통한 메타데이터 유효성 검사 아래 명령어를 통해 DAG 및 task가 의도한대로 등록되었는지, 구조가 잘 잡혔는지 확인할 수 있습니다. # 등록된 dag 목록 출력 $ airflow dags list dag_id | filepath | owner | paused ======================+==========================+===========+======= dag_decorator_test | temp.py | a..
-
Embulk 사용하기공부/데이터 2021. 11. 13. 01:25
Embulk는 플러그인을 사용해 여러 형태의 데이터 소스에서 데이터를 가져와 병렬로 로딩 할 수 있습니다. 여러개의 파일을 동시에 로딩하거나 하나의 큰 파일을 여러 파일로 쪼개서 로딩할 수 있어서 속도적인 측면에 장점이 있습니다. 인풋 파일의 데이터 타입을 자동으로 추측하여 스키마를 예측하므로 스키마 작업을 줄일 수 있습니다. Embulk는 자바 위에서 실행이 되므로 자바가 설치가 되어 있어야 합니다. 현재 버전인 v0.9와 v0.10은 자바8을 지원하고 자바9는 공식적으로는 지원하지 않으므로 유의해야 합니다. 설치 아래 명령어를 차례대로 입력하면 됩니다. $ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-lates..
-
[Airflow] Templates공부/데이터 2021. 11. 8. 00:37
Airflow에서는 변수, macro, filter를 템플릿에서 사용할 수 있습니다. 이러한 템플릿은 런타임에 task 인스턴스에 동적으로 정보를 전달하는 Airflow의 강력한 개념입니다. 아래는 작업을 실행할 때마다 요일을 인쇄하는 예시입니다. BashOperator( task_id="print_day_of_week", bash_command="echo Today is {{ execution_date.format('dddd') }}", ) 여기서 {{ execution_date.format('dddd') }} 가 템플릿 코드이고 위 코드를 수요일에 실행하면 "Today is Wednesday" 가 출력됩니다. 이러한 템플릿은 dag가 실행될 때, 실행날짜 별 파일을 만들어야 할 때, 유용하게 사용할 ..
-
[Airflow] Sensor공부/데이터 2021. 10. 31. 19:12
sensor는 1가지 작업을 수행하도록 설계된 특수한 operator입니다. 어떠한 작업(시간, 파일, 외부 이벤트 등)이 일어날 때까지 대기하다가 발생한다면 실행한 다음, 성공하여 downstream task가 실행될 수 있도록 합니다. sensor는 주로 idle 상태이기 떄문에 세 가지 다른 실행 모드가 있어 사용에 효율적입니다. poke(기본값): 전체 런타임 동안 worker 슬롯을 차지함 reschedule: 확인 중일 때만 worker 슬롯을 사용 smart sensor: 모든 실행을 일괄처리 하는 중앙 단일 버전 poke와 reschedule 모드는 sensor를 인스턴스화 할 때, 직접 구성할 수 있습니다. 둘 사이의 트레이드 오프는 대기 시간입니다. poke 모드는 매 초 확인할 때나 ..
-
[Airflow] Operator공부/데이터 2021. 10. 31. 19:12
operator는 DAG 내에서 task를 보다 쉽게 구현하도록 제공되는 템플릿입니다. with DAG("my-dag") as dag: ping = SimpleHttpOperator(endpoint="http://example.com/update/") email = EmailOperator(to="admin@example.com", subject="Update complete") ping >> email airflow 내에서 제공하는 operator 뿐만 아니라 provider에서 제공하는 operator도 존재합니다. BashOperator PythonOperator EmailOperator SimpleHttpOperator SqliteOperator MySqlOperator PostgresOperat..