여러 열에 조건부 적용
| 항목 | 값 |
|---|---|
| 화면 이름 | Apply to multiple columns |
| 식별자 | projectOnConditionV1 |
| 지원 실행 방식 | Batch, Faster, Streaming |
| 범주 | 자주 쓰는 변환 (Popular) |
입력 스키마의 열을 조건으로 선택하여 표현식을 적용하거나 출력 열을 구성합니다.
입력 인자
| 이름 | 지정 여부 | 자료형 | 의미와 조건 |
|---|---|---|---|
Condition for columns to project | 필수 | ColumnPredicate | 입력 스키마의 각 열을 검사하여 조건에 일치하는 열에 표현식을 적용합니다. |
Dataset | 필수 | Table | 연산을 적용할 데이터셋입니다. |
Expression to apply | 필수 | Expression<AnyType> | 조건에 맞는 각 열에 한 번씩 적용할 표현식입니다. |
Keep remaining columns | 필수 | Literal<Boolean> | 별도로 투영하지 않은 나머지 열을 유지합니다. |
Keep matched columns | 선택 | Literal<Boolean> | 조건에 맞았던 원래 열을 유지합니다. 투영한 열의 이름이 같으면 원래 열을 덮어씁니다. |
입출력 예시
예시 1: 기본 동작
정규식으로 일치한 열의 이름을 바꿉니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
dynamicAlias(
expression:
cast(
expression:column,
type: Integer,
),
transformer:
columnNameRegexReplace(
input:column,
pattern: str,
replace: int,
),
)Keep remaining columns: trueKeep matched columns: false
입력:
| id | distance_str | factor_str |
|---|---|---|
| 1 | 2000 | 1265 |
출력:
| distance_int | factor_int | id |
|---|---|---|
| 2000 | 1265 | 1 |
예시 2: 경계 조건
일치한 열과 나머지 열을 모두 유지할 수 있습니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
dynamicAlias(
expression:
cast(
expression:column,
type: Integer,
),
transformer:
columnNameConcat(
inputs: [column,_as_integer],
),
)Keep remaining columns: trueKeep matched columns: true
입력:
| id | distance |
|---|---|
| 1 | 2000 |
출력:
| distance_as_integer | id | distance |
|---|---|---|
| 2000 | 1 | 2000 |
예시 3: 경계 조건
새로 만든 열과 함께 조건에 일치했던 원래 열도 유지할 수 있습니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
dynamicAlias(
expression:
cast(
expression:column,
type: Integer,
),
transformer:
columnNameConcat(
inputs: [column,_as_integer],
),
)Keep remaining columns: falseKeep matched columns: true
입력:
| id | distance |
|---|---|
| 1 | 2000 |
출력:
| distance_as_integer | distance |
|---|---|
| 2000 | 2000 |
예시 4: 경계 조건
계산한 열이 원래 열과 이름이 같으면 원래 열을 덮어씁니다. 둘 다 유지하려면 새 열에 다른 이름을 지정합니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
cast(
expression:column,
type: Integer,
)Keep remaining columns: falseKeep matched columns: true
입력:
| id | distance |
|---|---|
| 1 | 2000 |
출력:
| distance |
|---|
| 2000 |
예시 5: 경계 조건
투영한 열만 유지할 수 있습니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
dynamicAlias(
expression:
cast(
expression:column,
type: Integer,
),
transformer:
columnNameConcat(
inputs: [column,_as_integer],
),
)Keep remaining columns: falseKeep matched columns: false
입력:
| id | distance |
|---|---|
| 1 | 2000 |
출력:
| distance_as_integer |
|---|
| 2000 |
예시 6: 경계 조건
조건에 일치하지 않은 나머지 열만 유지할 수 있습니다.
인자 값:
Condition for columns to project:
columnHasType(
type: String,
)Dataset: ri.foundry.main.dataset.aExpression to apply:
cast(
expression:column,
type: Integer,
)Keep remaining columns: trueKeep matched columns: false
입력:
| id | distance |
|---|---|
| 1 | 2000 |
출력:
| distance | id |
|---|---|
| 2000 | 1 |