데이터 엔지니어링 17

[PL/SQL] 프로시저 언어 기초(1)

[데이터 엔지니어링/SQL] - [PL/SQL] 프로시저의 주요 기능 변수 선언 변수 선언은 지정된 데이터 유형의 값에 대한 저장 공간을 할당하고 참조할 수 있도록 저장 위치의 이름을 지정한다. NOT NULL 스칼라 변수나 상수에 NOT NULL 제약 조건을 넣을 수 있다. 이는 항목에 NULL 값을 할당하는 것을 방지한다. 프로시저는 길이가 0인 문자열을 NULL값으로 처리한다. 변수 선언 변수의 이름과 데이터의 유형을 지정한다. 변수 선언시 초기 값을 지정할 수도 있다. 값의 변경이 가능하다. 상수 선언 변하지 않는 값을 보유한다. 초기값이 필요하다. 변수에 값 할당 변수와 값은 호환 가능한 데이터 유형을 가져야 한다. 데이터의 유형은 암시적으로 해당 유형으로 변환될 수 있는 경우 다른 데이터 유형..

[PL/SQL] 프로시저의 주요 기능

[데이터 엔지니어링/SQL] - [PL/SQL] 프로시저란? 프로시저의 장/단점 [PL/SQL] 프로시저란? 프로시저의 장/단점 해당 글은 Oracle의 공식 Document를 보고 작성하였습니다. 경로 프로시저란? 프로시저는 SQL을 확장하여 고성능의 트랜잭션 처리 언어이다. 즉 트랜잭션의 특징인 원자성, 일관성, 독립성, 영속성을 dog-foot-writen.tistory.com 프로시저는 데이터 조작 능력과 절차적 언어의 처리 능력을 결합하여 SQL 문제를 해결할 수 있다면 새로운 API를 배우지 않고 프로시저로 SQL을 실행할 수 있다. 다른 절차적 프로그래밍 언어와 마찬가지로 상수와 변수를 선언하고 프로그램 흐름을 제어하며, 하위 프로그램을 정의하고 런타임 오류를 잡을 수 있다. 주요 기능 오류..

[PL/SQL] 프로시저란? 프로시저의 장/단점

해당 글은 Oracle의 공식 Document를 보고 작성하였습니다. 경로 프로시저란? 프로시저는 SQL을 확장하여 고성능의 트랜잭션 처리 언어이다. 즉 트랜잭션의 특징인 원자성, 일관성, 독립성, 영속성을 가지며 데이터의 상태를 변화시키기 위해 일련의 절차를 작성한 프로그램이다. 더 쉽게 정리하자면 데이터베이스 내부에 SQL명령문(INSERT, SELECT, DELETE, UPDATE)의 수행 로직을 하나의 함수처럼 실행하기 위해 RDBMS에 저장한 쿼리의 집합이다. 프로시저의 장점 SQL과 유사하다. 프로시저는 모든 SQL 데이터의 조작, 커서제어, 트랜잭션 제어, SQL 함수 등을 사용할 수 있다. 프로시저는 SQL의 데이터 유형을 사용하여 SQL과 형변환 등이 필요 없다. 프로시저는 정적 SQL과..

[Airflow] 기반의 데이터 파이프라인(9) - Executor

Executor는 Task 인스턴스들을 실행하는 메커니즘입니다. 공통 API를 가지고 있으며 요구되는 사항에 맞게 Executor를 변경하여 설치할 수 있습니다. 다만 Airflow는 한 번에 하나의 Executor를 구성할 수 있으며, airflow.cfg에서 옵션을 변경할 수 있습니다. Executor Executor는 크게 두 가지로 분류할 수 있다. Local Executors 스케줄로 프로세스 내부에서 작업을 실행한다. dag.test() Debugging Airflow DAGs on the command line SequentialExecutor : Airflow 초기 설치 시 default값 다중 연결을 지원하지 않기 때문에 sqllite만 유일하게 지원한다. 한 번에 하나의 작업 인스턴스만..

[Hive] 하이브 Query 주의 사항

업무상 데이터분석가분들과 업무를 자주 하게 되는데 아무래도 주력이 Python이신 분들이 많다 보니 쿼리 사용에 미숙한 채로 Workflow를 개발하여 3~4시간 동안 서버의 cpu, memory를 전부 잡아먹는 배치를 만드는 경우가 잦아 쿼리 튜닝 중 자주 발생하는 문제점 몇 가지 주의사항을 공유하겠습니다. 1. 조건절 내부 사용자 정의함수(UDF) 제거 Hive 버전마다 상이하긴 하지만 UDF를 조건절에 사용하는 경우 optimizer가 제대로 된 실행계획을 작성하지 못하는 경우가 발생합니다. 따라서 UDF를 최대한 피하는 방향으로 쿼리를 작성하여야 합니다. 2. Partition column의 조회 Partition column을 substring 등으로 변경하지 않는다. Partition의 경우 ..

[Hive]하이브 관련 튜닝 옵션 정리

Hive 관련 업무를 진행하면서 지속적으로 찾게 되는 Hive관련 옵션들을 정리하였습니다. 아래 순서는 튜닝순서와는 전혀 관련이 없으며 Hive 배치들을 튜닝하며 사용한 옵션들을 메모해 놓은 것을 정리하였습니다. 혹시 틀린부분이 있다면 댓글로 정정부탁드립니다. 감사합니다. Tez SET hive.execution.engine=tez; Hive query의 실행 엔진을 tez엔진으로 세팅한다. mr엔진 혹은 spark로도 변경할 수 있으며 각각 옵션은 mr, spark이다. Hive 2.x 버전부터 default는 tez SET tez.am.container.reuse.enabled=true; tez 엔진이 동일한 컨테이너를 재사용하여 여러 쿼리를 실행할지 여부를 결정 매개변수를 활성화 하면 모든 쿼리에 ..

[Airflow] 기반의 데이터 파이프라인(8) - 워크플로우 트리거

워크플로우 트리거 : 미리 정의된 시간에 워크플로우를 시작하지 않고 특정 Task의 수행으로 시작해야 하는 경우 사용 외부 이벤트의 결과 공유 드라이브 등에 파일 업로드 변경된 코드가 repository에 푸시된 경우 Hive 테이블에 파티션이 생성된 경우 등등.. 위와 같은 사례의 일반적인 경우는 새로운 데이터가 도착하는 경우라고 볼 수 있다. 1. 센서(Sensor) 워크플로우 생성 시 특정 Event를 기다려야 하는 경우가 존재한다. 이러한 경우 Sensor를 사용할 수 있습니다. Sensor는 BashOperator, PythonOperator등과 같은 operator로써 해당하는 Event가 발생하는 것을 기다리도록 설계되어 있어 시간 혹은 파일 등의 외부 Event를 기다린 이후 수행하여 다운..

[Airflow] 기반의 데이터 파이프라인(7) - 태스크 간 데이터 공유

안녕하세요 아래 내용을 정리하다 보니 내용이 너무 빈약해 조금 더 공부하고 내용을 추가할 예정입니다. 1. XCom XCom(cross-communications) : 작업이 완전히 격리되어 있고 완전히 다른 서버에서 실행될 수 있기 때문에 작업이 서로 통신할 수 있도록 한다. XCom은 key와 task_id, dag_id에 의해 식별된다. XCom은 xcom_push, xcom_pull 메소드를 사용하여 값을 주고받는다. # push_task의 instance에서 xcom_push를 통해 XCom 값을 게시한다. push_instance.xcom_push(key="xcom unique key", value='보낼값') # pull_task의 instance에서 xcom_pull을 통해 XCom 값을 ..

[Airflow] 기반의 데이터 파이프라인(6) - 태스크 간 의존성 및 브랜치

의존성 1. 선형 의존성 Airflow에서 선형 의존성을 가진 Task는 이전 Task의 결과가 다음 Task의 입력값으로 사용되기 때문에, 다음 태스크로 이동하기 전에 각 태스크가 완료되어야 한다. Airflow에서는 >> 연산지 혹은 second_stream >> third_stream # 유형 2 # 유형 1과 마찬가지로 first_stream ~ third_stream까지 차례로 수행된다. # 후행Task.set_upstream(선행Task) second_stream.set_upstream(first_stream) third_stream.set_upstream(second_stream) # 유형 3 # set_downstream # 유형 1과 마찬가지로 first_stream ~ third_str..

[Airflow] 기반의 데이터 파이프라인(5) - 백필(BackFilling)

Workflow를 개발, 운영해본 입장이라면 과거데이터 재소급 등의 이유로 과거 시점의 데이터 처리를 진행할 필요가 있다는 것을 알고 있을 것이다. Airflow의 BackFilling은 이를 위해 존재한다. dag=DAG( dag_id="backfill_examples", schedule_interval="@daily", # 매일 자정에 실행되도록 DAG를 스케줄하는 매크로 start_date=dt.datetime(2023.1.1), # 2023.1.1 부터 DAG 실행 스케줄을 시작할 날짜/시간 end_date=dt.datetime(2023.12.31), # 2023.12.31 까지 DAG가 실행된다. catchup=True, # ...생략... ) catchup=True 인 경우 현재 시점보다 과거..