Apache Flink — 스트림을 엔진으로 돌린다 · 패턴 인식 (MATCH_RECOGNIZE) · 测验
퀴즈: MATCH_RECOGNIZE
6道题. 完成作答后会显示正确答案和解析。
한 사용자에게 실패 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 로 바꾼다