LabHub
学习 学习路径 课程

ClickHouse — 열 지향 분석 DB 를 속까지 · 뮤테이션·경량 DELETE·TTL · 测验

퀴즈: 뮤테이션·경량 DELETE·TTL

在 LabHub 中继续学习

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

  1. 40만 행 파트 하나에서 2% 의 status 를 `ALTER TABLE ... UPDATE` 로 바꿨다. system.part_log 의 MutatePart 기록이 보여 주는 것은?

    1. 바뀐 8천여 행만 새 파트로 쓰고 원래 파트에 덧붙였다
    2. 원래 파트를 제자리에서 고쳐 파트 이름이 그대로다
    3. 바뀐 행을 별도 패치 파일로 남기고 조회 때 합친다
    4. 40만 행을 읽고 40만 행짜리 새 파트(이름 끝에 뮤테이션 번호)를 썼다
  2. `DELETE FROM mut.events WHERE user_id = 888` 직후, 그 사용자의 행에 대해 참인 것은?

    1. 보통 SELECT 로는 가려지지만 파트에는 남아 rows 가 그대로다
    2. 파트가 다시 쓰여 그 행들이 디스크에서도 이미 사라졌다
    3. 다음 서버 재시작 때까지는 보통 SELECT 에도 그대로 보인다
    4. DELETE 는 뮤테이션이 아니라서 system.mutations 에 남지 않는다
  3. `ALTER TABLE t UPDATE amount = toUInt32(email) ...` 이 CANNOT_PARSE_TEXT 로 실패하고 있다. 이 상태에 대한 설명으로 맞는 것은?

    1. 실패한 파트만 건너뛰고 나머지 파트에서는 완료된다
    2. 자동으로 롤백되어 system.mutations 에서 사라진다
    3. is_done = 0 으로 남아 계속 재시도하고, 뒤의 뮤테이션을 막으며, KILL MUTATION 으로만 끝난다
    4. 서버를 재시작하면 뮤테이션이 취소된다
  4. 표 TTL `event_date + INTERVAL 180 DAY DELETE WHERE status = 'test'` 를 붙였는데 한동안 test 행이 그대로 보인다. 이유는?

    1. TTL 은 INSERT 할 때만 적용되므로 기존 행에는 영영 적용되지 않는다
    2. TTL 은 병합 때 적용된다 — MATERIALIZE TTL 이나 OPTIMIZE FINAL 로 지금 적용할 수 있다
    3. TTL 은 SELECT 할 때 조건으로 붙어 행을 가릴 뿐 지우지 않는다
    4. WHERE 가 붙은 TTL 은 파티션 키가 있어야만 동작한다
  5. `email String TTL if(legal_hold = 1, toDate('2100-01-01'), event_date + INTERVAL 90 DAY)` 가 적용되면 기한이 지난 보존 대상 아닌 행은?

    1. 행 전체가 삭제된다
    2. email 값이 NULL 이 된다
    3. email 값이 그 타입의 기본값인 빈 문자열이 된다
    4. email 열이 표에서 삭제된다
  6. 조회 기록 20만 행을 `TTL ts + INTERVAL 30 DAY GROUP BY user_id, toStartOfDay(ts) SET sum_hits = sum(sum_hits) ...` 표에 넣었다. OPTIMIZE FINAL 뒤 행 수는?

    1. (사용자, 날짜) 쌍의 수만큼 — 기한 지난 행이 한 줄씩으로 말려 들어간다
    2. 0 — 기한 지난 행은 모두 삭제된다
    3. 20만 그대로 — GROUP BY TTL 은 조회 때만 합친다
    4. 사용자 수만큼 — 날짜와 상관없이 사용자마다 한 줄