Legacy Rules 변환 파이프라인
2022년 7월 이전에 배포한 워크플로는 Code Repository의 변환이 승인한 규칙 로직을 데이터에 적용합니다. 기본 배포가 대부분의 코드를 구성하지만 입력, 관계나 출력을 추가하면 코드도 갱신해야 합니다.
기존 변환 클래스의 import와 실제 리소스 바인딩을 유지합니다. 참조 변환이 필요하면 기존 템플릿을 갱신해 참조 변환을 배포하는 절차를 이용합니다. 다음 메서드는 그 변환 클래스 안에 두고, 기존 @Compute 메서드에 주입된 실제 입력과 출력으로 호출하는 구현입니다.
온톨로지 메타데이터 입력
@AdditionalInputs는 규칙에서 사용할 온톨로지 메타데이터 의존성을 선언합니다.
- Workshop의 모든 객체 유형 RID를
.addObjectRids()에 추가합니다. - 사용할 모든 관계 RID를
.addLinkRids()에 추가합니다. - 해당 온톨로지와 브랜치 RID를 지정합니다.
객체 유형과 관계의 RID는 Ontology Manager에서 복사합니다. 코드 선언에 더해 Code Repository의 Settings에 있는 Ontology Imports에서도 모든 객체 유형과 관계를 가져와야 합니다.
두 객체 유형과 한 관계를 사용하는 경우의 메타데이터 입력 생성 메서드입니다. 실제 RID를 인수로 전달하고 반환값을 기존 @AdditionalInputs 필드의 값으로 사용합니다.
private static Set<InputSpec> metadataInputs(
String ontologyRid,
String ontologyBranchRid,
String objectTypeRidA,
String objectTypeRidB,
String linkTypeRid) {
return ImmutableOntologyInputs.builder()
.addObjectRids(objectTypeRidA)
.addObjectRids(objectTypeRidB)
.addLinkRids(linkTypeRid)
.ontologyRid(ontologyRid)
.ontologyBranchRid(ontologyBranchRid)
.build()
.getInputSpecs();
}
더 많은 객체 유형이나 관계를 노출한다면 그 항목의 선언도 추가합니다.
데이터 입력과 출력 바인딩
기존 @Compute 메서드의 @Input에는 다음 데이터셋을 모두 등록합니다.
- 규칙 객체의 쓰기 반영 데이터셋
- 앱에 노출한 객체의 기반 데이터셋
- 직접 사용하는 데이터셋 입력
- 다대다 관계를 조인할 때 사용하는 조인 테이블
@Output에는 결과 데이터셋과 규칙 상태 데이터셋을 지정합니다. 규칙 상태 출력에는 실제 저장 경로가 필요하며, 이 데이터셋에는 실행에 성공하지 못한 규칙의 상세 정보가 담깁니다.
앱에서 새 객체나 데이터셋을 추가할 때마다 @Input과 실행기의 .putSources()를 모두 갱신합니다. 다대다 조인 테이블은 입력 등록 외에 .manyToManyJoinTables()에도 등록합니다.
규칙 실행과 결과 쓰기
다음 메서드는 객체 입력 두 개, 직접 데이터셋 입력 한 개와 다대다 조인 테이블 한 개를 사용하는 구성을 처리합니다. 모든 데이터 인수는 해당 워크플로에서 바인딩한 FoundryInput과 FoundryOutput입니다.
| 문자열 인수 | 전달할 값 |
|---|---|
objectTypeIdA, objectTypeIdB | 객체 유형 ID. 메타데이터 선언의 객체 유형 RID와 구분 |
datasetDisplayName | Workshop의 Add Dataset에서 설정한 표시 이름과 정확히 같은 값 |
linkTypeId | 다대다 관계의 링크 유형 ID. 메타데이터 선언에는 관계 RID 사용 |
logicColumnName, ruleIdColumnName | 규칙 데이터셋의 로직 열과 규칙 ID 열 이름. 예를 들어 RuleLogic, RuleId |
outputActionTypeRid | 출력 스키마를 정의한 액션 유형의 실제 RID |
private static void executeConfiguredRules(
FoundryInput objectInputA,
String objectTypeIdA,
FoundryInput objectInputB,
String objectTypeIdB,
FoundryInput datasetInput,
String datasetDisplayName,
FoundryInput joinInput,
String linkTypeId,
FoundryInput rulesInput,
String logicColumnName,
String ruleIdColumnName,
String outputActionTypeRid,
FoundryOutput outcomeOutput,
FoundryOutput ruleStatusOutput,
TransformContext transformContext) {
Dataset<Row> objectRowsA = objectInputA.asDataFrame().read();
Dataset<Row> objectRowsB = objectInputB.asDataFrame().read();
Dataset<Row> datasetRows = datasetInput.asDataFrame().read();
Dataset<Row> joinRows = joinInput.asDataFrame().read();
Dataset<Row> rulesDataset = rulesInput.asDataFrame().read();
TaurusRuleRunner.Args args = new TaurusRuleRunner.Args.Builder()
.rules(new Rules.Builder()
.logicColumnName(logicColumnName)
.ruleIdColumnName(ruleIdColumnName)
.dataset(rulesDataset)
.build())
.putSources(SourceReference.objectTypeId(objectTypeIdA), objectRowsA)
.putSources(SourceReference.objectTypeId(objectTypeIdB), objectRowsB)
.putSources(SourceReference.dataset(DatasetName.of(datasetDisplayName)), datasetRows)
.manyToManyJoinTables(ImmutableMap.of(LinkTypeId.of(linkTypeId), joinRows))
.shouldMatchContourExecutionBehavior(true)
.context(transformContext)
.build();
RuleEffects effects = TaurusRuleRunner.runRules(args);
Dataset<Row> outcomes = effects.actionReadyMergedDataset(
ActionTypeRid.valueOf(outputActionTypeRid));
outcomeOutput.getDataFrameWriter(outcomes).write();
ruleStatusOutput.getDataFrameWriter(effects.statusDataset()).write();
}
.shouldMatchContourExecutionBehavior(true)는 실행 결과를 규칙 편집기 미리보기의 동작과 맞춥니다. 기본값은 false이므로 예제에서는 명시적으로 켰습니다.
규칙 실행은 Spark에서 지연 평가됩니다. 결과와 상태 데이터셋을 쓰는 작업까지 구성해야 합니다.
액션별 결과 데이터셋
.actionReadyMergedDataset()에 액션 유형 RID를 전달하면 그 액션을 사용하는 모든 규칙의 결과 행을 가져옵니다. 액션 유형 RID는 Ontology Manager의 액션 유형 화면에서 확인합니다.
결과 스키마에는 액션 매개변수마다 한 열과 해당 행을 만든 규칙의 ID 열이 들어갑니다. 규칙 ID 열을 후속 처리에 사용할 때는 반환된 실제 스키마의 이름을 확인합니다.
출력 액션을 추가했다면 새 @Output 바인딩을 만들고 같은 RuleEffects에서 추가 액션의 결과를 가져와 씁니다.
배포된 참조 예제
환경에 참조 구현이 구성되어 있다면 Business Rules with Rules Workflow 폴더를 검색합니다. 또는 Foundry Training and Resources 프로젝트의 Reference Examples, Application Development in Workshop, Business Rules with Rules Workflow 순서로 이동합니다.
이 참조에는 가상 항공 온톨로지를 사용하는 Workflow 앱과 변환 파이프라인이 포함됩니다.