Skip to main content
대부분의 데이터베이스와 마찬가지로 ClickHouse는 테이블을 데이터베이스(databases) 단위로 논리적으로 묶습니다. ClickHouse에서 새 데이터베이스를 생성하려면 CREATE DATABASE 명령을 사용하세요:
CREATE DATABASE IF NOT EXISTS helloworld
마찬가지로 새 테이블을 정의할 때는 CREATE TABLE을 사용합니다. 데이터베이스 이름을 지정하지 않으면 테이블은 default 데이터베이스에 생성됩니다. 다음과 같이 helloworld 데이터베이스에 my_first_table이라는 테이블을 생성합니다:
  CREATE TABLE helloworld.my_first_table
  (
      user_id UInt32,
      message String,
      timestamp DateTime,
      metric Float32
  )
  ENGINE = MergeTree()
  PRIMARY KEY (user_id, timestamp)
위 예시에서 my_first_table은 4개의 컬럼을 가진 MergeTree 테이블입니다:
  • user_id: 32비트 부호 없는 정수
  • message: String 데이터 타입으로, 다른 데이터베이스 시스템의 VARCHAR, BLOB, CLOB 등의 타입을 대체합니다
  • timestamp: 특정 시점을 나타내는 DateTime
  • metric: 32비트 부동소수점 숫자
테이블 엔진은 다음 사항을 결정합니다:
  • 데이터가 저장되는 방식과 위치
  • 지원되는 쿼리
  • 데이터 복제 여부
선택할 수 있는 엔진은 많지만, 단일 노드 ClickHouse 서버에서 사용하는 간단한 테이블이라면 MergeTree가 일반적인 선택입니다.

프라이머리 키에 대한 간단한 소개

계속 진행하기 전에 ClickHouse에서 프라이머리 키(primary key)가 어떻게 동작하는지 이해하는 것이 중요합니다(프라이머리 키의 구현 방식은 다소 예상 밖일 수 있습니다!):
  • ClickHouse의 프라이머리 키는 테이블의 각 행마다 고유하지 않습니다
ClickHouse 테이블의 프라이머리 키는 데이터가 디스크에 기록될 때 어떤 방식으로 정렬되는지를 결정합니다. 8,192개 행 또는 10MB의 데이터마다(이를 인덱스 세분화 수준(index granularity) 이라고 함) 프라이머리 키 인덱스 파일에 항목 하나가 생성됩니다. 이러한 세분화 수준 개념은 메모리에 쉽게 올릴 수 있는 희소 인덱스(sparse index) 를 만들며, 그래뉼은 SELECT 쿼리에서 처리되는 가장 작은 단위의 컬럼 데이터 스트라이프를 나타냅니다. 프라이머리 키는 PRIMARY KEY 매개변수를 사용해 정의할 수 있습니다. PRIMARY KEY를 지정하지 않고 테이블을 정의하면 키는 ORDER BY 절에 지정된 튜플이 됩니다. PRIMARY KEYORDER BY를 모두 지정하는 경우, 프라이머리 키는 정렬 순서의 접두사여야 합니다. 프라이머리 키는 정렬 키이기도 하며, (user_id, timestamp) 형태의 튜플입니다. 따라서 각 컬럼 파일에 저장되는 데이터는 먼저 user_id, 그다음 timestamp 순으로 정렬됩니다.
자세한 내용은 ClickHouse Academy의 Modeling Data training module을 확인하십시오.
Last modified on June 10, 2026