#100DaysOfClickHouse 8일 차: ClickHouse® 데이터 타입 이해
Source: Dev.to
ClickHouse® 데이터 타입 이해하기: 초보자 가이드
ClickHouse®를 사용할 때 가장 먼저 이해해야 할 개념 중 하나가 바로 데이터 타입입니다. 겉보기에 사소한 구현 상세처럼 보일 수 있지만, 올바른 데이터 타입을 선택하면 데이터베이스의 성능, 저장 효율성, 확장성에 큰 영향을 미칩니다.
전통적인 행 기반 데이터베이스와 달리 ClickHouse는 분석 워크로드를 위해 설계된 컬럼형 데이터베이스입니다. 데이터가 컬럼 단위로 저장되기 때문에 각 데이터 타입의 크기와 구조가 압축 비율, 메모리 사용량, 쿼리 실행 속도에 직접적인 영향을 줍니다.
데이터 타입이 중요한 이유
ClickHouse에서 올바른 데이터 타입을 선택하면 다음을 달성할 수 있습니다.
- 저장소 사용량 감소
- 데이터 압축 효율 향상
- 쿼리 성능 향상
- 메모리 사용량 감소
- 보다 효율적인 분석 시스템 구축
예를 들어, 수십억 건의 레코드에서 작은 상태 코드를 Int64 대신 UInt8 컬럼에 저장하면 상당한 저장 공간을 절약할 수 있습니다.
ClickHouse의 핵심 데이터 타입
정수 타입
정수 타입은 정수값을 저장할 때 사용합니다. ClickHouse는 부호가 있는 타입과 없는 타입을 모두 제공하며, 주요 타입은 다음과 같습니다.
UInt8,UInt16,UInt32,UInt64Int32,Int64
주로 ID, 카운터, 수치형 속성 등에 사용됩니다. 베스트 프랙티스는 데이터를 안전하게 저장할 수 있는 가장 작은 정수 타입을 선택하는 것입니다.
부동소수점 및 Decimal 타입
근사값을 저장하려면 Float32와 Float64를 사용합니다. 메트릭, 비율, 백분율, 센서값 등에 적합합니다.
하지만 부동소수점은 반올림 오차를 발생시킬 수 있습니다. 가격, 청구서, 거래 금액 등 금융 데이터에는 정확한 정밀도가 필요한 만큼 Decimal32, Decimal64, Decimal128과 같은 Decimal 타입을 사용하세요.
문자열 타입
텍스트 데이터는 일반적으로 String 타입으로 저장합니다. 많은 데이터베이스와 달리 ClickHouse는 VARCHAR(255)와 같은 최대 길이 지정이 필요 없습니다.
고정 길이 값을 저장해야 할 경우 FixedString(N)을 사용할 수 있습니다. 이는 국가 코드, 해시값, 길이가 일정한 기타 값에 유용합니다.
날짜·시간 타입
분석 워크로드에서는 타임스탬프가 자주 사용됩니다. ClickHouse는 여러 옵션을 제공합니다.
DateDate32DateTimeDateTime64
대부분의 이벤트 추적 및 분석 시나리오에서는 밀리초 정밀도를 제공하면서도 뛰어난 성능을 유지하는 DateTime64(3)을 권장합니다.
Boolean 및 UUID 타입
최근 버전의 ClickHouse는 Bool 타입을 기본 지원하여 true/false 값을 저장할 수 있습니다.
UUID 타입은 전역 고유 식별자를 압축된 바이너리 형식으로 효율적으로 저장하므로, 문자열로 저장하는 것보다 훨씬 좋은 선택입니다.
고급 타입
ClickHouse는 다음과 같은 복합 타입도 제공합니다.
Array(T)Tuple(T1, T2, …)Map(K, V)
반구조화 데이터, 메타데이터, 태그, 중첩된 정보를 다룰 때 유용합니다.
또한 Nullable(T) 를 사용하면 컬럼에 NULL 값을 허용할 수 있습니다. 편리하지만 Nullable 컬럼은 추가 저장 오버헤드를 발생시키므로, 꼭 필요할 때만 사용하는 것이 좋습니다.
LowCardinality의 힘
ClickHouse에서 가장 가치 있는 최적화 중 하나가 LowCardinality(String) 입니다.
이 기능은 상대적으로 적은 수의 고유값을 갖는 컬럼에 대해 사전(dictionary) 인코딩을 적용합니다. 예시:
- 국가명
- 상태값
- 카테고리
- 디바이스 종류
LowCardinality를 사용하면 압축 효율과 쿼리 성능이 크게 향상되며, 구현 비용도 거의 들지 않습니다.
피해야 할 흔한 실수
초보자들이 자주 저지르는 실수는 다음과 같습니다.
- 모든 컬럼을
String으로 정의 - 과도하게 큰 정수 타입 선택
- 금액 데이터를 부동소수점으로 저장
- 너무 많은 컬럼을 Nullable로 지정
LowCardinality최적화를 무시
이러한 실수를 피하면 성능과 자원 활용도에서 눈에 띄는 개선을 기대할 수 있습니다.
마무리 생각
ClickHouse 데이터 타입을 이해하는 것은 데이터베이스를 다루는 모든 사람에게 필수적인 기본 역량입니다. 올바른 데이터 타입은 정보를 정확히 저장할 뿐만 아니라 ClickHouse가 제공하는 속도와 효율성을 극대화합니다.
기억해 두면 좋은 간단한 규칙:
- 데이터를 안전하게 담을 수 있는 가장 작은 타입을 사용
- 불필요한 Nullable 컬럼은 피하고
- 가능하면 LowCardinality를 적극 활용
스키마 설계 단계에서 신중하게 선택한다면, 수십억 행의 데이터를 처리하더라도 효율적으로 확장되고 뛰어난 성능을 발휘하는 ClickHouse 시스템을 구축할 수 있습니다.
Read more… https://quantrail-data.com/clickhouse-data-types-explained-for-beginners/