Apache Flink — Running Streams on a Real Engine
Quiz: MATCH_RECOGNIZE
한국어 원문으로 표시합니다.
한 사용자에게 실패 5번 뒤 성공 1번이 연달아 왔다. PATTERN (F{3,} S) 를 AFTER MATCH SKIP TO NEXT ROW 로 돌리면 매치는 몇 개인가?
- 1개 — 가장 긴 실패 구간 하나
- 2개 — 실패 5번과 4번짜리
- 3개 — 실패 5·4·3번짜리
- 5개 — 실패마다 하나
패턴 S T+ B 에서 T 는 amount < 20, B 는 amount >= 10 이다. 로그인 뒤 결제가 5, 12, 15, 300 순서로 왔을 때 탐욕 T+ 의 매치에서 B 에 걸리는 행은?
- 12 — B 조건을 처음 만족하는 행
- 300 — T 가 5·12·15 를 먹은 뒤의 행
- 15 — T 조건을 만족하는 마지막 행
- 없다 — 조건이 겹쳐 오류가 난다
WITHIN INTERVAL '30' SECOND 를 붙였다. 첫 실패가 21:00:00, 성공이 21:00:30 인 후보는 이 파드의 엔진에서 어떻게 되었나?
- 매치로 나온다 — 30초 이하면 통과한다
- 매치로 나오되 fails 가 하나 줄어든다
- 잡이 오류로 멈춘다 — 경계값은 허용되지 않는다
- 버려진다 — 간격이 정확히 30초인 후보도 떨어졌다
도착 순서가 최대 8초 흐트러진 파일을 워터마크 지연 0초로 읽어 MATCH_RECOGNIZE 를 돌렸다. 정렬된 파일에 비해 결과는?
- 매치가 줄어든다 — 앞서 온 행보다 이른 행이 늦은 행으로 버려진다
- 같다 — 이벤트 시간으로 정렬한 뒤 찾기 때문이다
- 매치가 늘어난다 — 순서가 바뀌어 새 연속 구간이 생긴다
- 잡이 실패한다 — ORDER BY 열이 정렬돼 있지 않다
MATCH_RECOGNIZE 에서 PARTITION BY 를 빼면 어떻게 되는가?
- 문법 오류다 — PARTITION BY 는 반드시 있어야 한다
- 전역 순서를 지키려고 병렬도 1 인 연산자로 바뀐다
- 키가 자동으로 첫 열로 정해진다
- 행마다 따로 패턴을 찾아 매치가 나오지 않는다
MATCH_RECOGNIZE 잡의 상태가 계속 커진다. 문서가 권하는 손잡이는?
- table.exec.state.ttl 을 짧게 준다
- AFTER MATCH SKIP TO NEXT ROW 로 바꾼다
- PATTERN 뒤에 WITHIN 으로 매치 시간 상한을 준다
- ONE ROW PER MATCH 를 ALL ROWS PER MATCH 로 바꾼다