프로그래밍 ETL
    • PDF

    프로그래밍 ETL

    • PDF

    기사 요약

    개요

    전송 설정 STEP2의****데이터 설정 > 프로그래밍 ETL에 대해 설명하는 도움말 페이지입니다.
    프로그래밍 ETL에서는 전송처에서 가져온 데이터에 대해 직접 작성한 프로그램을 실행할 수 있습니다.
    프로그래밍 ETL을 이용하면 템플릿 ETL에서는 할 수 없는 유연한 변환 처리를 할 수 있습니다.

    계획상의 제약

    프로그래밍 ETL은 Advanced 플랜 이상의 계약 계정에서만 사용할 수 있습니다.

    programming-etl_001.png

    지원 언어

    • Python 3.9
    • Ruby 3.2
    • Ruby 2.7
    외부 라이브러리 정보

    기본적으로 표준 라이브러리만 사용할 수 있습니다.
    이용하고 싶은 외부 라이브러리가 있다면, 아래 정보와 함께 고객 지원팀에 문의해 주시기 바랍니다.

    • 외부 라이브러리 공식 URL
    • 이용하고 싶은 버전

    또한, 표준 라이브러리의 경우, 라이브러리 추가를 다시 요청할 필요가 없습니다.
    라이브러리 추가를 요청하기 전에 아래 공식 문서를 통해 해당 라이브러리가 표준 라이브러리에 포함되는지 확인하시기 바랍니다.

    제약조건

    • 한 줄 단위로 변환 처리만 기술할 수 있습니다.
      • 한 행의 처리 결과를 다음 행으로 이어받는 것은 불가능합니다.
      • 따라서 여러 줄에 걸친 집계 처리 등은 기술할 수 없습니다. 양해 부탁드립니다.
    • 프로그램 실행 시 메모리 제한은 약 1GB로 설정되어 있습니다.
    • 전송 설정 생성 및 편집 시 스키마 생성은 실행 후 10분이 지나면 타임아웃되는 사양으로 되어 있습니다.
    • 한편, 전송 작업 실행 시 프로그래밍 ETL 처리에 대한 타임아웃 설정은 특별히 설정되어 있지 않습니다.
      • 한 줄당 1분 정도의 처리 시간이라면 문제없이 실행됩니다.
    작업 실행 시 데이터 설정의 처리 순서

    전송처에서 가져온 데이터에 대해 먼저 템플릿 ETL 처리가 먼저 이루어집니다.
    그 후 프로그래밍 ETL 처리가 진행됩니다.

    설정 절차

    프로그래밍 ETL로 작성한 프로그램은 두 가지 역할을 한다.

    • 전송 설정 생성 및 편집 시 스키마 생성에 활용됩니다.
    • 전송 작업 실행 시, 전송처에서 가져온 데이터에 대한 처리가 수행됩니다.

    다음은 전송 설정 생성 및 편집 시 스키마 생성 절차에 대해 설명합니다.

    1. 입력 데이터 생성

    입력 데이터 생성을 클릭합니다.
    템플릿 ETL의 설정이 반영된 상태의 데이터가 JSON 형식으로 스키마 생성을 위한 입력 데이터 양식으로 생성됩니다.
    자세한 내용은 아래 스키마 생성을 위한 입력 데이터 포맷을 참고하세요.

    입력 데이터 저장

    입력 데이터 저장을 클릭하면 해당 시점의 입력 데이터가 저장됩니다.
    입력 데이터를 편집한 후 한 번 화면을 떠나서 다시 이어서 편집하고 싶을 때 등에 사용할 수 있습니다.

    2. 소스 코드 설명

    소스 코드에 프로그램을 작성합니다.
    자세한 내용은 후술하는 소스 코드 내 각 요소의 역할을 참고하세요.

    3. 스키마 생성

    스키마 생성을 클릭합니다.
    1단계에서 생성한 입력 데이터에 대해 프로그램이 실행됩니다.
    실행이 완료되면 스키마 생성 시 출력 데이터에 JSON 형식의 데이터가 표시됩니다.
    또한, 프로그래밍 ETL 활성화 시 스키마도 업데이트됩니다.

    스키마 생성 시간 초과

    스키마 생성은 실행 후 10분이 지나면 타임아웃되는 사양으로 되어 있습니다.
    만약 타임아웃이 발생하면 실행 시간이 10분 이내가 되도록 소스코드를 수정해 주세요.

    참고로 이 타임아웃 사양은 스키마 생성 처리에 대해서만 설정되어 있습니다.
    전송 작업 실행 시 프로그래밍 ETL 처리에 대한 타임아웃 설정은 특별히 설정되어 있지 않습니다.

    4. 스키마 편집

    업데이트된 프로그래밍 ETL 활성화 시 스키마를 적절히 편집합니다.

    소스 코드 내에서 날짜 및 시간 문자열 컬럼을 추가한 경우

    소스 코드 내에서 날짜 및 시간 문자열 컬럼을 추가하면 기본적으로 string 타입으로 인식됩니다.
    타임스탬프 타입으로 인식하게 하려면 프로그래밍 ETL 활성화 시 스키마에서타임스탬프 타입을 선택하고 적절한 날짜 및 시간 형식을 입력해야 합니다.

    5. 스키마 저장

    변경사항 미리보기 또는 확인 화면으로 이동을 클릭합니다.
    어느 쪽을 클릭하든 프로그래밍 ETL의 설정 내용은 저장됩니다.
    프로그래밍 ETL이 실행된 상태의 데이터를 확인하려면 변경사항 미리보기를 클릭합니다.

    프로그래밍 ETL 활성화 시 스키마

    프로그래밍 ETL이 비활성화되어 있는 경우, 컬럼 정의에서 설정된 스키마에 따라 전송이 이루어집니다.
    한편, 프로그래밍 ETL이 활성화된 경우, 프로그래밍 ETL이 활성화된 스키마에 따라 전송이 이루어진다.
    프로그래밍 ETL 활성화 시 스키마를 편집한 후 템플릿 ETL 측에서 컬럼 관련 설정을 변경한 경우, 설정 절차를 다시 수행해야 합니다.

    프로그램 제작 관련 사양

    스키마 생성을 위한 입력 데이터 형식

    • 입력 데이터는 rows라는 배열(리스트) 구조의 변수에 저장됩니다.
    • rows의 각 요소는 각 행의 데이터와 대응하며, 각 요소는 컬럼을 key로 하는 해시(사전) 구조로 되어 있습니다.
    rows : [
      {<row1_columnA>: <value>, 
       <row1_columnB>: <value>, 
       <row1_columnC>: <value>
      },
      {<row2_columnA>: <value>, 
       <row2_columnB>: <value>, 
       <row2_columnC>: <value>
      },
      {<row3_columnA>: <value>, 
       <row3_columnB>: <value>, 
       <row3_columnC>: <value>
      }
    ]
    

    소스 코드 내 각 요소의 역할

    아래에서는 파이썬을 예로 들어 설명하겠습니다.

    from etl_base import EtlBase
    
    class Etl(EtlBase): class Etl(EtlBase):
      def __init__(self):
        pass
    
      def transform_row(self, row): def transform_row:
        row ["columnA"] = "hoge" # 기존 열의 값이 변경됩니다.
        row ["new_column"] = "fuga" # 새로운 열이 추가됩니다.
        del row ["columnC"] # 기존 열이 삭제됩니다.
        반환 행
    
      def before_action(self): def before_action(self):
        pass
    

    EtlBase 클래스 및 Etl 클래스

    EtlBase 클래스와 Etl 클래스는 프로그래밍 ETL을 수행하는 데 필요한 요소입니다.
    삭제하거나 이름을 변경하지 마십시오.

    transform_row 메서드

    본 메서드 내에서 적절한 처리를 기술해 주십시오.
    프로그램이 실행되면 rows의 각 요소가 한 줄씩 transform_row 메서드에 전달됩니다.
    기본적으로 rows의 각 요소는 row로 전달된다. 아래에서는 행 데이터가 row에 전달되었다고 가정하고 설명합니다.

    • row에 존재하는 key의 값을 다시 작성하면 해당 컬럼의 값이 변경됩니다.
    • row에 새로운 key를 추가하면 key 이름을 컬럼 이름으로 하는 새로운 컬럼이 추가된다.
    • row에 존재하는 key를 삭제하면 해당 컬럼이 삭제된다.

    참고로 transform_row 메서드의 반환값에 따라 스키마 생성 및 전송이 이루어진다.
    따라서 가공한 row를``반환해야 합니다.
    NULL 값을 반환하면 해당 라인의 전송을 건너뛴다. (Python의 경우 None, Ruby의 경우 nil )

    before_action 메서드

    transform_row 메서드보다 먼저 한 번만 실행됩니다.
    before_action 메서드 내에서 인스턴스 변수를 대입할 수 있습니다.
    또한, 해당 값을 transform_row 메서드 내에서 사용할 수 있습니다.
    행에 대한 처리가 순차적으로 실행되기 전에 임의의 연산 처리를 하고 싶을 때 사용합니다.

    def before_action(self): def before_action(self):
      self.hoge = "hoge"
    

    보충 사항

    스키마 생성을 위한 입력 데이터 수동 편집

    :::(정보)

    스키마 생성을 위한 입력 데이터는 수동으로 편집할 수도 있습니다.
    스키마 생성을 위한 입력 데이터를 적절히 편집하여 스키마를 생성하고, 작성한 프로그램이 제대로 실행되는지 테스트하는 등의 작업이 가능합니다.

    단, 스키마를 생성하면****프로그래밍 ETL 활성화 시 스키마도 업데이트됩니다.
    전송 작업 실행 시 전송 원본에서 가져온 데이터의 구조와 프로그래밍 ETL 활성화 시 스키마가 다를 경우 전송이 실패합니다.
    따라서 스키마 생성을 위한 입력 데이터의 수동 편집은 어디까지나 테스트용으로만 사용하시기 바랍니다.
    :::

    표준 출력/오류 출력

    :::(정보)

    소스 코드에 print와 같은 출력 함수/메서드를 작성한 경우, 그 출력 결과는 표준 출력/오류 출력에 표시됩니다.
    또한, 스키마 생성에 실패한 경우 오류 메시지도 표준 출력/오류 출력에 표시됩니다.
    :::


    이 문서가 도움이 되었습니까?