LowCardinality 데이터 타입
LowCardinality 데이터 타입
다른 데이터 타입의 내부 표현을 사전(dictionary) 인코딩으로 바꿔주는 타입이에요. 사전에 10,000개 미만의 서로 다른 값이 있으면 데이터 읽기·저장 효율이 대부분 더 높아져요.
출처: 문서
본문
다른 데이터 타입의 내부 표현을 사전 인코딩(dictionary-encoded)으로 바꿔줘요.
문법 (Syntax)
LowCardinality(data_type)
매개변수 (Parameters)
data_type— String, FixedString, Date, DateTime, 그리고 Decimal을 제외한 숫자들.LowCardinality는 어떤 데이터 타입에는 효율적이지 않아요. allow_suspicious_low_cardinality_types 설정 설명을 참고해요.
설명 (Description)
LowCardinality는 데이터 저장 방법과 데이터 처리 규칙을 바꾸는 상위 구조(superstructure)예요. ClickHouse는 LowCardinality 컬럼에 사전 코딩(dictionary coding)을 적용해요. 사전 인코딩된 데이터로 작업하면 많은 애플리케이션에서 SELECT 쿼리의 성능이 크게 향상돼요.
LowCardinality 데이터 타입의 효율은 데이터 다양성에 따라 달라져요. 사전에 10,000개 미만의 서로 다른 값이 있으면 ClickHouse는 대부분 데이터 읽기·저장의 효율이 더 높아요. 사전에 100,000개 이상의 서로 다른 값이 있으면 ClickHouse는 일반 데이터 타입을 사용할 때보다 성능이 나빠질 수 있어요.
문자열을 다룰 때 Enum 대신 LowCardinality를 사용하는 것을 고려해 볼게요. LowCardinality는 사용에서 더 많은 유연성을 제공하며 종종 동일하거나 더 높은 효율을 보여줘요.
예시 (Example)
LowCardinality 컬럼이 있는 테이블 만들기:
CREATE TABLE lc_t
(
`id` UInt16,
`strings` LowCardinality(String)
)
ENGINE = MergeTree()
ORDER BY id
관련 설정과 함수 (Related Settings and Functions)
설정:
- low_cardinality_max_dictionary_size
- low_cardinality_use_single_dictionary_for_part
- low_cardinality_allow_in_native_format
- allow_suspicious_low_cardinality_types
- output_format_arrow_low_cardinality_as_dictionary
함수: