LabHub
学习 学习路径 课程

Apache Flink — 스트림을 엔진으로 돌린다 · 중복 제거와 Top-N · 测验

퀴즈: 중복 제거와 Top-N

在 LabHub 中继续学习

6道题. 完成作答后会显示正确答案和解析。

  1. `ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY ts ASC)` 가 1 인 행만 남긴 결과를 파일 싱크에 쓰려 한다. 가능한 이유는?

    1. 첫 행 유지는 한 번 낸 행을 바꾸지 않아 결과가 insert-only 이기 때문이다
    2. 파일 싱크가 -U 를 받으면 해당 줄을 알아서 지우기 때문이다
    3. ASC 정렬은 배치로만 돌아 변경 로그가 없기 때문이다
    4. 중복 제거는 모든 결과를 창이 닫힐 때 한 번에 내기 때문이다
  2. 이벤트 622행·주문 240건에 이벤트 시간 마지막 행 유지를 돌렸다. 출력의 -U 개수는?

    1. 240 — 주문마다 한 번씩
    2. 382 — 같은 주문의 두 번째 이후 행마다 한 쌍
    3. 622 — 들어온 행마다 한 번씩
    4. 재전송을 뺀 수 — 같은 행이 다시 오면 무시한다
  3. 문서가 정한 중복 제거 패턴에서 `ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)` 의 ORDER BY 에 올 수 있는 것은?

    1. 기본 키 열 — 같은 키끼리 순서를 정한다
    2. 아무 열이나 — ASC · DESC 방향만 정하면 된다
    3. 시간 속성(처리 시간 또는 이벤트 시간) 열
    4. 바깥에서 거를 순번 열 rn 자체
  4. 범주별 Top-3 를 순번 `rn` 과 함께 낼 때와 뺄 때를 비교했다. 맞는 설명은?

    1. 순번을 빼면 최종 결과의 상품 구성이 달라진다
    2. 두 쿼리의 로그 양은 같고 열 수만 다르다
    3. 순번을 빼면 Top-N 이 append-only 가 되어 철회가 사라진다
    4. 최종 결과는 같고, 순번을 빼면 순위만 바뀐 행을 다시 보내지 않아 로그가 준다
  5. 마지막 행 유지 위에 `GROUP BY status` 로 상태별 주문 수를 셌다. 주문 하나가 created 에서 paid 로 바뀔 때 집계가 받는 것과 하는 일은?

    1. -U created · +U paid 를 받아 created 칸에서 하나 빼고 paid 칸에 하나 더한다
    2. +I paid 만 받아 paid 칸에 하나 더하고 created 칸은 그대로 둔다
    3. 창이 닫힐 때까지 기다렸다가 두 칸을 한 번에 다시 센다
    4. 같은 주문이므로 아무 로그도 받지 않는다
  6. 재처리할 때마다 같은 결과가 나와야 하는 파이프라인에서 중복 제거의 ORDER BY 로 무엇을 쓰는 것이 맞나?

    1. 처리 시간 PROCTIME() — 도착한 순서가 가장 믿을 만하다
    2. 이벤트 시간 속성 — 결과가 자료에만 달려 다시 돌려도 같다
    3. 순번 열 rn 자체 — 중복 제거가 스스로 정렬한다
    4. 아무 숫자 열 — 시간 속성일 필요는 없다