Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Pipeline Builder에서 증분 항공편 필터 만들기

가상 입력 flights에 매주 새 항공편이 추가되고, 출발 공항이 JFK인 행만 filtered_flights에 누적한다고 가정합니다. 전체 입력이 2천만 행이고 매주 100만 행이 추가된다면 증분 실행은 매번 전체를 다시 읽는 대신 아직 처리하지 않은 추가 트랜잭션을 다룹니다.

입력과 로직의 조건

증분 입력으로 표시하는 것만으로 모든 파이프라인이 증분 실행되는 것은 아닙니다. 다음 조건을 확인합니다.

  • 입력은 APPEND 또는 기존 파일을 수정하지 않고 새 파일만 추가하는 UPDATE 트랜잭션으로 갱신됩니다.
  • 새 입력을 처리하면서 이미 쓴 출력 데이터를 바꿀 필요가 없습니다.
  • 윈도 함수, 집계와 피벗을 사용한다면 이전 출력 전체가 아닌 현재 입력 트랜잭션에만 적용하려는 계산이어야 합니다.

예제의 origin = JFK 필터는 새 항공편을 독립적으로 판단할 수 있습니다. 나중에 LGA도 포함하도록 바꾸면 과거에 처리한 항공편에도 새 조건을 적용할지 결정해야 합니다. 과거 결과까지 바꾸려면 전체 재생을 사용합니다.

결합 연산의 제약

연산증분 구성 조건
증분과 스냅샷 조인증분 입력을 왼쪽, 스냅샷 입력을 오른쪽에 둡니다.
두 증분 입력의 조인지원합니다. 실제 변경분의 결합 의미를 기준으로 설계합니다.
오른쪽 스냅샷 입력 갱신하위 조인은 계속 증분 실행됩니다. 오른쪽 입력 변경만으로 파이프라인 재생을 강제하는 구성은 지원하지 않습니다.
Union모든 입력이 스냅샷이거나 모두 증분이어야 합니다.
과거 출력 읽기Pipeline Builder에서는 previous 읽기 모드를 직접 사용할 수 없습니다. 일부 출력 쓰기 모드가 해당 사용 사례를 지원합니다.
배치 증분 재생전체 입력 재생만 지원합니다.

입력이 스냅샷으로 대체되거나 출력 전체를 다시 계산해야 하는 로직이라면 일반 스냅샷 계산을 사용합니다. 작은 입력에서는 증분 처리의 추가 복잡도에 비해 이점이 작을 수 있습니다.

파이프라인 구성

배치 파이프라인을 만들고 flights를 입력으로 추가합니다. 입력에는 출발 공항을 나타내는 origin 열이 있어야 합니다.

  1. 입력 노드 아래에서 Incremental을 선택합니다. 오른쪽 위에 파란 배지가 나타납니다.
  2. 변환을 추가하여 Filter > Keep rows에서 origin이 JFK와 같은 행을 유지합니다.
  3. 변환 경로와 하위 노드에 증분 입력 아이콘 및 파란 배지가 표시되는지 확인합니다.
  4. 출력 데이터셋 filtered_flights를 추가합니다.

Python 로직이 필요하면 Pipeline Builder의 Python 사용자 정의 함수로 작성하거나 Python 증분 변환으로 별도 단계를 구성할 수도 있습니다.

예상하지 않은 전체 재계산 방지

증분 실행이 불가능할 때 자동으로 전체 스냅샷을 실행하지 않도록 하려면 빌드 설정의 Require incremental execution을 사용합니다.

  1. Deploy 옆 또는 오른쪽 도구 모음의 Build settings 슬라이더 아이콘을 선택합니다.
  2. Advanced configuration에서 Require incremental execution을 True로 설정합니다. 기본값은 No value로 비활성 상태입니다.
  3. 파이프라인에 증분 입력 또는 출력이 하나 이상 있어야 합니다. 없으면 배포 오류가 발생합니다.

활성화하면 실행 작업 묶음과 관계없이 모든 증분 출력이 증분 실행 불가 상황에서 실패합니다. 입력이 뜻하지 않게 스냅샷으로 바뀌거나 출력 스키마 변경으로 전체 갱신이 필요해진 경우에 사용할 수 있습니다. 파이프라인 변경으로 상태 단절이 필요한 경우에는 사용자가 이를 확인한 뒤 스냅샷을 수행하는 예외가 있습니다.

필터 결과가 0행인 배치도 입력 처리 위치를 기록해야 한다면 같은 고급 설정의 Commit empty transactions를 사용할 수 있습니다. 켜면 빈 출력 트랜잭션을 커밋하여 이후 빌드에서 같은 입력을 반복 처리하는 일을 막습니다. 이는 Python 변환의 개별 출력 중단 API와 별도의 Pipeline Builder 설정입니다.

배포와 과거 입력 재생

저장한 뒤 파이프라인을 배포합니다.

기존 입력에도 새 로직을 적용해야 하면 Replay on deploy를 선택합니다. 전체 입력을 새 로직으로 다시 처리하며 출력에 SNAPSHOT 트랜잭션을 만듭니다. 재생 이후 들어오는 새로운 추가 트랜잭션은 다시 증분 계산으로 처리합니다.

JFK만 포함하던 조건을 JFK 또는 LGA로 바꾼 경우, 재생하지 않으면 이미 처리한 과거 항공편을 새 조건으로 다시 선택하지 않습니다. 변경이 어떤 기간의 출력에 적용되어야 하는지를 정하고 배포합니다.