write_* MergeTree 테이블 설정

write_* MergeTree 테이블 설정

이 페이지에서는 마크(mark) 작성과 쓸 때의 동작을 제어하는 write_* 계열 설정을 설명할게요. 이 설정들은 system.merge_tree_settings 테이블에서 확인할 수 있고, ClickHouse 소스 코드에서 자동으로 생성된 값이에요.

출처: 문서

본문

이 설정들은 system.merge_tree_settings 테이블에서 확인할 수 있으며, ClickHouse 소스에서 자동으로 생성돼요.

write_final_mark

사용되지 않는 설정으로, 아무 것도 하지 않아요.

write_marks_for_substreams_in_compact_parts

Compact 파트에서 컬럼별이 아니라 각 서브스트림별로 마크를 쓰도록 활성화해요. 이를 통해 데이터 파트에서 개별 서브컬럼을 효율적으로 읽을 수 있어요.

예를 들어, 컬럼 t Tuple(a String, b UInt32, c Array(Nullable(UInt32)))는 다음 서브스트림으로 직렬화돼요:

  • t.a — 튜플 요소 a의 String 데이터
  • t.b — 튜플 요소 b의 UInt32 데이터
  • t.c.size0 — 튜플 요소 c의 배열 크기
  • t.c.null — 튜플 요소 c의 중첩 배열 요소 null 맵
  • t.c — 튜플 요소 c의 중첩 배열 요소 UInt32 데이터

이 설정이 활성화되면 이 5개 서브스트림 각각에 대해 마크를 작성하므로, 필요하면 granular에서 개별 서브스트림 데이터를 각각 읽을 수 있어요. 예를 들어 서브컬럼 t.c를 읽고 싶다면 t.c.size0, t.c.null, t.c 서브스트림의 데이터만 읽고 t.at.b 서브스트림 데이터는 읽지 않아요. 이 설정이 비활성화되면 최상위 컬럼 t에 대해서만 마크를 작성하므로, 일부 서브스트림 데이터만 필요해도 항상 granular에서 전체 컬럼 데이터를 읽어요.

더 알아보기 (Learn more)