LabHub
배우기 러닝패스 코스

Apache Flink — 스트림을 엔진으로 돌린다 · 패턴 인식 (MATCH_RECOGNIZE) · 실습

무차별 대입과 카드 시험을 패턴으로 잡는다

LabHub 에서 이어서 보기

목표

로그인·결제 사건에서 MATCH_RECOGNIZE 로 무차별 대입(실패 3번 이상 뒤 성공)과 카드 시험(로그인 뒤 소액 결제 뒤 큰 결제)을 찾고, AFTER MATCH SKIP 전략 · WITHIN · 탐욕/비탐욕 · 워터마크 지연이 매치를 어떻게 바꾸는지 확인한다.

왜 중요한가

탐지 규칙은 "연달아 · 그 뒤에 · 얼마 안에" 처럼 행의 순서에 대한 조건이라 GROUP BY 나 창 집계로는 못 쓴다. MATCH_RECOGNIZE 는 이것을 선언적으로 쓰게 해 주지만, 같은 패턴도 전략·수량자·시간 제한에 따라 경보 수가 몇 배로 달라진다. 이 실습의 채점기는 클러스터에 묻지 않는다. 원본 파일에서 같은 규칙으로 매치를 파이썬으로 다시 찾아 여러분의 sql-client 출력과 한 행씩 대조한다.

단계

1. flink-up/root/flink/cep/ddl.sqlcep_events.csv 를 읽는 events 표(워터마크 ts - INTERVAL '1' SECOND)를 만들고, 종류(kind)별 건수 n 을 내는 /root/flink/cep/count.sql 의 출력을 /root/flink/cep/count.out 에 저장하세요.
2. 무차별 대입 패턴(F{3,} S, AFTER MATCH SKIP PAST LAST ROW)의 /root/flink/cep/brute.sql 출력을 /root/flink/cep/brute.out 에 저장하세요. 열은 user_id, first_fail, fails, ok_ts.
3. 전략만 SKIP TO NEXT ROW 로 바꾼 /root/flink/cep/nextrow.sql 의 출력을 /root/flink/cep/nextrow.out 에 저장하세요.
4. 2단계 패턴에 WITHIN INTERVAL '30' SECOND 를 더한 /root/flink/cep/within.sql 의 출력을 /root/flink/cep/within.out 에 저장하세요.
5. 카드 시험 패턴(S T+ B, 탐욕)의 /root/flink/cep/greedy.sql 출력을 /root/flink/cep/greedy.out 에 저장하세요. 열은 user_id, login_ts, small_n, big_amount, big_ts.
6. T 수량자만 비탐욕(T+?)으로 바꾼 /root/flink/cep/reluctant.sql 의 출력을 /root/flink/cep/reluctant.out 에 저장하세요.
7. cep_events_shuffled.csv 를 워터마크 지연 10초로 읽는 /root/flink/cep/ddl-shuffled.sql, 0초로 읽는 /root/flink/cep/ddl-shuffled0.sql 을 만들어 brute.sql 을 각각 돌린 출력을 /root/flink/cep/shuffled.out·/root/flink/cep/shuffled0.out 에 저장하세요.
8. /root/flink/cep/report.json 에 매치 수와 금액 합을 모으세요.

참고

8단계

  1. 사건 표를 만들고 센다
  2. 실패 세 번 이상 뒤 성공
  3. SKIP TO NEXT ROW 로 바꾼다
  4. 30초 안에 끝난 것만
  5. 카드 시험 — 탐욕 수량자
  6. 비탐욕으로 바꾼다
  7. 흐트러진 도착 순서와 워터마크
  8. 보고서 — 규칙이 경보 수를 정한다