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.a와 t.b 서브스트림 데이터는 읽지 않아요. 이 설정이 비활성화되면 최상위 컬럼 t에 대해서만 마크를 작성하므로, 일부 서브스트림 데이터만 필요해도 항상 granular에서 전체 컬럼 데이터를 읽어요.