시간 범위 내 중복 제거
| 항목 | 값 |
|---|---|
| 화면 이름 | Time bounded drop duplicates |
| 식별자 | timeBoundedDropDuplicatesV3 |
| 지원 실행 방식 | Streaming |
| 범주 | 열, 행과 실행 제어 (Other) |
지정한 열 부분집합의 중복 행을 제거하고, 관찰한 행의 상태는 설정한 이벤트 시간 뒤에 만료합니다. 설정한 이벤트 시간보다 더 늦게 도착한 행은 항상 제외합니다. 키별로 분할하여 서로 다른 키 값마다 중복 제거를 수행합니다. 상태 정리는 eviction 윈도 경계에서 이루어지므로 timeout 이후에도 중복으로 제외되는 구간이 생길 수 있습니다.
입력 인자
| 이름 | 지정 여부 | 자료형 | 의미와 조건 |
|---|---|---|---|
Dataset | 필수 | Table | 중복 행을 제거할 데이터셋입니다. |
Key expiration time unit | 필수 | Enum<Days, Hours, Milliseconds, Minutes, Seconds> | 중복 제거에서 데이터를 기다릴 시간 단위입니다. |
Key expiration time value | 필수 | Literal<Long> | 중복 제거에서 데이터를 기다릴 기간 값입니다. |
Column subset | 선택 | Set<Column<AnyType>> | 열을 지정하면 해당 열만 유일성 판단에 사용합니다. 지정하지 않으면 스트림에 설정된 키 부분집합을 사용합니다. |
Eviction window slide | 선택 | Tuple<Literal<Long>, Enum<Days, Hours, Milliseconds, Minutes, Seconds, Weeks>> | 오래된 상태를 제거하는 tumbling 윈도의 주기입니다. 지정한 이벤트 시간 timeout을 넘으면 오래된 상태로 봅니다. 마지막 중복 관찰 이후 (key_expiry, key_expiry + eviction_slide] 구간에도 중복을 제거합니다. 값을 바꾸면 상태 호환성이 깨져 재생이 필요합니다. |
Key by columns | 선택 | Set<Column<Binary | Boolean | Byte | Double | Float | Integer | Long | Short | String | Timestamp>> | 입력을 분할할 키 열입니다. 고유 키마다 중복 제거를 별도로 병렬 계산합니다. |
입출력 예시
예시 1: 기본 동작
00:00:00 첫 레코드를 출력하고 eviction slide가 정하는 다음 tumbling 윈도 경계에 상태 제거를 예약합니다. 기본 slide는 1분입니다. timeout이 10초여도 워터마크가 제거 시점에 도달하지 않아 00:00:09, 00:00:18, 00:00:28 레코드는 모두 중복으로 제외됩니다. 키 만료와 만료+slide 사이에도 중복 제거가 이어집니다.
인자 값:
Dataset: ri.foundry.main.dataset.testKey expiration time unit:SECONDSKey expiration time value: 10Column subset: nullEviction window slide: nullKey by columns: null
입력:
| row_order | day | temperature | measurement_timestamp |
|---|---|---|---|
| 4 | Monday | 10.4 | 2024-09-30T00:00:28 |
| 3 | Monday | 10.3 | 2024-09-30T00:00:18 |
| 2 | Monday | 10.2 | 2024-09-30T00:00:09 |
| 1 | Monday | 10.1 | 2024-09-30T00:00:00 |
출력:
| day | temperature | measurement_timestamp |
|---|---|---|
| Monday | 10.1 | 2024-09-30T00:00:00 |
예시 2: 기본 동작
day 열로 분할하면 키별 상태가 독립적입니다. Monday의 00:00:20 첫 레코드는 출력하고 워터마크를 진행시킵니다. Tuesday의 00:00:05 레코드는 timeout 10초를 더한 00:00:15가 약 00:00:20인 워터마크보다 과거이므로 이전 기록이 없어도 제외됩니다. Wednesday의 00:00:25 레코드는 늦지 않아 해당 키의 첫 행으로 출력합니다.
인자 값:
Dataset: ri.foundry.main.dataset.testKey expiration time unit:SECONDSKey expiration time value: 10Column subset: nullEviction window slide: nullKey by columns: {day}
입력:
| row_order | day | temperature | measurement_timestamp |
|---|---|---|---|
| 3 | Wednesday | 22.1 | 2024-09-30T00:00:25 |
| 2 | Tuesday | 18.3 | 2024-09-30T00:00:05 |
| 1 | Monday | 20.5 | 2024-09-30T00:00:20 |
출력:
| day | temperature | measurement_timestamp |
|---|---|---|
| Monday | 20.5 | 2024-09-30T00:00:20 |
| Wednesday | 22.1 | 2024-09-30T00:00:25 |