다음을 통해 공유


오류 및 조건부 실행

적용 대상: Azure Data Factory Azure Synapse Analytics

기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!

조건부 경로

Azure Data Factory 및 Synapse 파이프라인 오케스트레이션은 조건부 논리를 허용하고, 사용자가 이전 작업의 결과에 따라 다른 경로를 사용할 수 있도록 합니다. 다른 경로를 사용하면 사용자가 강력한 파이프라인을 빌드하고 ETL/ELT 논리에서 오류 처리를 통합할 수 있습니다. 총 4개의 조건부 경로를 허용합니다.

이름 설명
성공 시 (기본 통과) 현재 작업이 성공하면 이 경로를 실행합니다.
실패 시 현재 작업이 실패하면 이 경로를 실행합니다.
완료 시 성공 여부에 관계없이 현재 작업이 완료되면 이 경로를 실행합니다.
건너뛰기 시 작업 자체가 실행되지 않은 경우 이 경로를 실행합니다.

작업의 네 가지 분기를 보여 주는 스크린샷

한 가지 예외를 제외하고 여러 분기를 작업 뒤에 추가할 수 있습니다. 완료 시 경로는 성공 시 또는 실패 시 경로와 공존할 수 없습니다. 각 파이프라인 실행에 대해 작업의 실행 결과에 따라 최대 하나의 경로가 활성화됩니다.

오류 처리

일반적인 오류 처리 메커니즘

Try Catch 블록

이 방법에서는 고객이 비즈니스 논리를 정의하고, 실패 시 경로만 정의하여 이전 작업의 오류를 catch합니다. 이 방법은 실패 시 경로가 성공하는 경우 파이프라인 성공을 렌더링합니다.

try catch 블록의 정의 및 결과를 보여 주는 스크린샷

Do If Else 블록

이 방법에서는 고객이 비즈니스 논리를 정의하고, 실패 시성공 시 경로를 모두 정의합니다. 이 방법은 실패 시 경로가 성공하는 경우에도 파이프라인 실패를 렌더링합니다.

do if else 블록의 정의 및 결과를 보여 주는 스크린샷

Do If Skip Else 블록

이 방법에서는 고객이 비즈니스 논리를 정의하고, 더미 건너뛰기 시 작업이 연결된 실패 시 경로와 성공 시 경로를 모두 정의합니다. 이 방법은 실패 시 경로가 성공하는 경우 파이프라인 성공을 렌더링합니다.

do if else skip else 블록의 정의 및 결과를 보여 주는 스크린샷

요약표

접근 방식 정의 작업이 성공하면 전체 파이프라인이 표시됩니다. 작업이 실패하면 전체 파이프라인이 표시됩니다.
Try-Catch 실패 시 경로만 성공 성공
Do-If-Else 실패 시 경로 + 성공 시 경로 Success 실패
Do-If-Skip-Else 실패 시 경로 + 성공 시 경로(끝에 건너뛰기 시 더미 있음) 성공 성공

파이프라인 실패를 결정하는 방법

다른 오류 처리 메커니즘은 파이프라인에 대해 서로 다른 상태를 생성합니다. 즉, 일부 파이프라인은 실패하지만 다른 파이프라인은 성공합니다. 파이프라인의 성공과 실패를 다음과 같이 결정합니다.

  • 모든 리프 작업에 대한 결과를 평가합니다. 리프 작업을 건너뛴 경우 부모 작업을 대신 평가합니다.
  • 모든 노드에서 성공으로 평가한 경우에만 파이프라인 결과가 성공입니다.

실패 시 작업 및 더미 실패 시 작업 성공을 가정하는 경우 다음과 같습니다.

  • Try-Catch 방법

    • 이전 작업이 성공하면 실패 시 노드를 건너뛰고 해당 부모 노드가 성공합니다. 전체 파이프라인이 성공합니다.
    • 이전 작업이 실패하면 실패 시 노드가 실행됩니다. 전체 파이프라인이 성공합니다.
  • Do-If-Else 방법

    • 이전 작업이 성공하면 성공 시 노드가 성공하고 실패 시 노드를 건너뜁니다(해당 부모 노드가 성공함). 전체 파이프라인이 성공합니다.
    • 이전 작업이 실패하면 성공 시 노드를 건너뛰고 해당 부모 노드가 실패했습니다. 전체 파이프라인이 실패합니다.
  • Do-If-Skip-Else 방법

    • 이전 작업이 성공하면 노드 건너뛰기 시 더미를 건너뛰고 해당 성공 시 부모 노드가 성공하며, 다른 실패 시 노드 작업을 건너뛰고 해당 부모 노드가 성공합니다. 전체 파이프라인이 성공합니다.
    • 이전 작업이 실패하면 실패 시 노드가 성공하고 건너뛰기 시 더미가 성공합니다. 전체 파이프라인이 성공합니다.

조건부 실행

더 복잡하고 복원력 있는 파이프라인을 개발함에 따라 특정 조건이 충족되는 경우에만 특정 작업을 실행하는 조건부 실행을 논리에 도입해야 하는 경우가 있습니다. 사용 사례는 다음과 같이 많습니다.

  • 이전 복사 작업이 성공한 경우 후속 작업(예: 이메일 알림 보내기) 실행
  • 이전 작업 중 하나가 실패한 경우 오류 처리 작업 실행
  • 작업 자체 또는 해당 오류 처리 작업이 성공하면 다음 단계로 진행
  • 기타

여기서는 몇 가지 일반적인 논리와 ADF에서 이러한 논리를 구현하는 방법을 설명합니다.

단일 작업

단일 작업을 따르는 몇 가지 일반적인 패턴은 다음과 같습니다. 이러한 패턴을 구성 요소로 사용하여 복잡한 작업 흐름을 구성할 수 있습니다.

오류 처리

패턴은 ADF에서 가장 일반적인 조건 논리입니다. 오류 처리 작업은 "실패 시" 경로에 대해 정의되며 기본 작업이 실패하면 호출됩니다. 대체 대안 또는 로깅이 필요한 모든 중요 업무 단계에 대한 모범 사례로 통합해야 합니다.

중요 업무용 단계에 대한 오류 처리를 보여주는 스크린샷.

최선의 작업 단계

정보 로깅과 같은 특정 단계는 덜 중요하며 이러한 단계의 실패로 인해 전체 파이프라인을 차단하지 않아야 합니다. 이러한 경우 작업 흐름의 차단을 해제하기 위해 다음 단계를 "완료 시" 경로에 추가하는 최선의 작업 전략을 채택해야 합니다.

최상의 로그 시도를 보여주는 스크린샷.

첫 번째이며 가장 일반적인 시나리오는 "and" 조건부입니다. 이전 작업이 성공하는 경우에만 파이프라인을 계속합니다. 예를 들어 데이터 처리의 다음 스테이지로 이동하기 전에 먼저 성공해야 하는 여러 복사 작업이 있을 수 있습니다. ADF에서는 다음 단계에 대해 여러 종속성을 선언하는 동작을 쉽게 달성할 수 있습니다. 그래픽에서 이는 다음 작업을 가리키는 여러 줄을 의미합니다. "성공 시" 경로를 선택하여 종속성이 성공했는지 확인하거나, "완료 시" 경로를 선택하여 최선의 작업 실행을 허용할 수 있습니다.

여기서 후속 대기 작업은 두 웹 작업이 모두 성공한 경우에만 실행됩니다.

파이프라인을 보여주는 스크린샷은 두 웹 작업이 모두 성공한 경우에만 진행됩니다.

여기서는 ActivitySucceeded가 통과하고 ActivityFailed가 완료되면 후속 대기 작업이 실행됩니다. "성공 시" 경로의 경우 ActivitySucceeded가 성공해야 하지만, "완료 시" 경로의 ActivityFailed는 최선의 작업으로 실행됩니다. 즉, 실패할 수 있습니다.

첫 번째 웹 작업이 성공하고 두 번째 웹 작업이 완료되는 경우 파이프라인 진행을 보여주는 스크린샷.

또는

두 번째 일반적인 시나리오는 "or" 조건부입니다. 종속성 중 하나가 성공하거나 실패하면 작업을 실행합니다. 여기서는 "완료 시" 경로, If Condition 작업식 언어를 사용해야 합니다.

코드를 자세히 살펴보기 전에 한 가지를 더 이해해야 합니다. 작업이 실행되고 완료되면 @activity('ActivityName').Status를 사용하여 해당 상태를 참조할 수 있습니다. “Succeeded” 또는 “Failed” 중 하나입니다. 이 속성을 사용하여 조건부 또는 논리를 빌드합니다.

공유 오류 처리 로깅 단계

경우에 따라 이전 작업 중 하나가 실패한 경우 공유 오류 처리 또는 로깅 단계를 호출할 수 있습니다. 파이프라인은 다음과 같이 빌드할 수 있습니다.

  • 여러 작업을 병렬로 실행
  • True 분기에서 오류 처리 단계를 포함하는 if 조건을 추가
  • "완료 시" 경로를 사용하여 작업을 조건 작업에 연결
  • 조건 작업 읽기에 대한 논리 식
@or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded').Status, 'Failed'))
  • 참고: 연결이 필요합니다. 또는 두 개가 넘는 종속성 작업이 있는 경우입니다. 예를 들어 다음과 같습니다.
@or(or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded1').Status, 'Failed')),equals(activity('ActivitySucceeded1').Status, 'Failed'))

이전 활동이 실패한 경우 공유 오류 처리 단계를 실행하는 방법을 보여주는 스크린샷.

작업이 성공한 경우 녹색 표시

모든 작업이 최선의 작업이면 이전 작업 중 하나가 성공한 경우 다음 단계로 진행할 수 있습니다. 파이프라인은 다음과 같이 빌드할 수 있습니다.

  • 여러 작업을 병렬로 실행
  • True 분기에서 다음 단계를 포함하는 if 조건 추가
  • "완료 시" 경로를 사용하여 작업을 조건 작업에 연결
  • 조건 작업 읽기에 대한 논리 식
@or(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))
  • 참고: 그래프는 이전 시나리오와 똑같이 표시됩니다. 유일한 차이점은 사용되는 식 언어입니다.

작업이 통과하면 파이프라인이 다음 단계로 진행되는 스크린샷.

복잡한 시나리오

계속 진행하려면 모든 작업이 성공해야 합니다.

패턴은 조건부 및 + 오류 처리의 조합입니다. 진행 중인 모든 작업이 성공하면 파이프라인에서 다음 단계로 진행하고, 그렇지 않으면 공유 오류 로깅 단계를 실행합니다. 파이프라인은 다음과 같이 빌드할 수 있습니다.

  • 여러 작업을 병렬로 실행
  • if 조건 추가. True 분기에서 다음 단계를 추가하고, False 분기에서 오류 처리 코드를 추가합니다.
  • "완료 시" 경로를 사용하여 작업을 조건 작업에 연결
  • 조건 작업 읽기에 대한 논리 식
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))

작업이 통과하거나 오류 처리 코드를 실행하는 경우 파이프라인을 보여주는 스크린샷은 다음 단계로 진행됩니다.

일반적인 패턴

Try-Catch-Proceed

패턴은 코딩에서 try catch 블록과 같습니다. 파이프라인에서 작업이 실패할 수 있습니다. 실패하면 고객은 오류 처리 작업을 실행하여 처리해야 합니다. 그러나 단일 작업 실패가 파이프라인의 다음 작업을 차단해서는 안 됩니다. 예를 들어 복사 작업을 실행하여 파일을 스토리지로 이동하려고 시도하지만 중간에 실패할 수 있습니다. 그래서 부분적으로 복사되고 신뢰할 수 없는 파일을 스토리지 계정에서 삭제하고 싶습니다(내 오류 처리 단계) 그러나 나중에 다른 작업을 계속해도 괜찮습니다.

패턴을 설정하려면:

  • 첫 번째 작업 추가
  • UponFailure 경로에 오류 처리 추가
  • 두 번째 작업을 추가하지만 첫 번째 작업에 연결하지 않음
  • 오류 처리 작업에서 두 번째 작업으로 UponFailure 및 UponSkip 경로를 모두 연결

참고 항목

각 경로(UponSuccess, UponFailure 및 UponSkip)는 모든 활동을 가리킬 수 있습니다. 여러 경로가 동일한 활동을 가리킬 수 있습니다. 예를 들어 UponSuccess와 UponSkip은 둘 다 하나의 활동을 가리키고 UponFailure는 다른 작업을 가리킬 수 있습니다.

try catch 블록이 있는 파이프라인을 보여주는 스크린샷.

오류 처리 작업은 첫 번째 작업이 실패할 때만 실행됩니다. 첫 번째 작업이 성공했는지 여부에 관계없이 다음 작업이 실행됩니다.

일반 오류 처리

일반적으로 파이프라인에서는 순차적으로 여러 작업이 실행됩니다. 오류가 발생하면 오류 처리 작업을 실행하여 상태를 지우고/지우거나 오류를 기록해야 합니다. 예를 들어 파이프라인에 순차 복사 작업이 있는데 이 중 하나라도 실패하면 스크립트 작업을 실행하여 파이프라인 실패를 기록해야 합니다.

패턴을 설정하려면:

  • 순차 데이터 처리 파이프라인 빌드
  • 파이프라인의 끝에 일반 오류 처리 단계 추가
  • 마지막 작업에서 오류 처리 작업으로 UponFailure 및 UponSkip 경로를 모두 연결

분기가 없는 파이프라인에서 일반 오류 처리가 있는 파이프라인을 보여주는 스크린샷

마지막 단계인 일반 오류 처리는 이전 작업이 실패한 경우에만 실행됩니다. 모두 성공하면 실행되지 않습니다.

오류 처리를 위해 여러 작업을 추가할 수 있습니다.

분기 및 여러 활동이 없는 파이프라인에서 일반 오류 처리가 있는 파이프라인을 보여주는 스크린샷

Data Factory 메트릭 및 경고

시각적으로 모니터링