Macro Run 단계
매크로 워크플로를 실행별로 격리된 하위 호출로 실행합니다. 워크플로 실행과 달리 Macro Run의 모든 호출은 다음과 같이 동작합니다.
- 고유한 새
run_id를 부여받습니다. - 프로젝트 카탈로그의 자체 임시 스크래치 스키마(
macrorun_<run_id>)에서 실행됩니다. - 복사 입력 시 호출자 쪽 테이블과 변수를 매크로에 선언된 입력 포트에 바인딩합니다.
- 성공하면 매크로에 선언된 출력 테이블을 호출자 쪽 대상으로 복사합니다.
- 호출이 끝나면(성공, 오류, 중지 모두) 항상 스크래치 스키마를 삭제합니다.
이러한 격리 덕분에 상위 루프, 동시에 실행되는 독립 워크플로, 또는 다른 매크로의 재귀 호출 등에서 실행 간 중간 테이블 이름 충돌 없이 동일한 매크로를 안전하게 동시에 호출할 수 있습니다.
대상 워크플로는 매크로로 지정되어 있어야 합니다. 매크로가 아닌 워크플로를 대상으로 하는 Macro Run 단계는 명확한 오류 메시지와 함께 실패합니다. 반대로 워크플로 실행 또는 Workflow Loop 단계는 매크로를 대상으로 할 수 없습니다(이러한 단계에는 실행별 격리 수명 주기가 없습니다).
실행할 매크로
섹션 제목: “실행할 매크로”- 프로젝트 — 매크로가 들어 있는 프로젝트입니다. v1에서는 호출자와 같은 프로젝트여야 합니다.
- 매크로 — 호출할 매크로 워크플로입니다. 선택하면 매크로에 선언된 입력 및 출력 포트가 아래 바인딩 목록에 채워집니다.
입력 포트 바인딩
섹션 제목: “입력 포트 바인딩”매크로에 선언된 각 입력 포트마다 바인딩을 추가합니다. 바인딩은 두 단계로 처리됩니다. 먼저 스칼라/차원 입력(매크로의 실행 범위 변수 오버레이에 기록)을 처리한 다음 테이블 입력을 처리하므로, 테이블 입력 필터에서 스칼라 입력을 참조할 수 있습니다.
테이블 입력 포트:
- 소스 — 내용이 포트 이름으로 매크로의 스크래치 스키마에 복사되는 호출자 쪽 테이블(이름 또는 ID)입니다.
- 열 — 선택적 열 프로젝션입니다. 일부 열만 선택하고 필요하면 이름을 바꿀 수 있습니다(
source→target). 열은 따옴표로 묶여 복사 입력 시 적용되므로 프로젝션된 열만 구체화됩니다. - 필터 — 복사 입력 시 적용하는 선택적
WHERE절입니다. 매크로의 입력 변수를 이름으로 참조할 수 있습니다(위의 스칼라 바인딩에서 확인됩니다). 예를 들어month = {month}는 여러 해에 걸친 테이블에서 한 달 분량만 복사하도록 제한합니다.
스칼라/차원 입력 포트:
- 변수 — 설정할 매크로 쪽 변수 이름입니다(매크로에 선언된 포트와 일치해야 합니다).
- 값 — 바인딩할 값으로, 리터럴 또는 호출자 쪽 변수 참조입니다(하위 호출의 오버레이에 기록되기 전에 호출자의 변수에 대해 확인됩니다).
출력 포트 바인딩
섹션 제목: “출력 포트 바인딩”매크로에 선언된 각 출력 포트마다 호출자 쪽 대상 테이블을 가리키는 바인딩을 추가합니다. 대상이 없으면 즉시 생성됩니다. 출력 복사는 다음과 같이 동작합니다.
- 매크로가 성공적으로 완료된 후(
done또는warn상태) 수행됩니다. - 매크로를 실행 도중 수동으로 중지한 경우(
stop상태)에는 건너뜁니다. 그렇지 않으면 부분 출력이 호출자의 영구 스키마에 조용히 기록될 수 있기 때문입니다. - 선택적 열 프로젝션은 입력 바인딩과 동일하게 작동합니다.
실패 시 동작
섹션 제목: “실패 시 동작”| 매크로 결과 | 호출자 쪽 영향 |
|---|---|
done / warn |
출력 테이블이 호출자 대상으로 복사되고 스크래치 스키마가 삭제됩니다. |
stop (수동 중지) |
복사 출력을 건너뛰고 스크래치 스키마가 삭제되며 호출자 경고가 기록됩니다. |
| 실행 중 오류 | Macro Run 단계에서 오류가 발생하고 스크래치 스키마가 삭제되며 출력은 기록되지 않습니다. |
매크로의 워크플로가 실패하면 Macro Run 단계의 로그에 매크로 자체의 오류 메시지(“Child workflow run failed:” 다음에 메시지)가 표시되므로, 매크로의 실행을 열지 않고도 무엇을 수정해야 하는지 확인할 수 있습니다.
스크래치 스키마는 항상 finally 블록에서 회수되므로, 실패하거나 중지된 매크로가 프로젝트 스키마에 중간 테이블을 남기는 일은 없습니다.
아직 예시가 없습니다…