Formats

Formats (데이터 형식)

ClickHouse는 대부분의 알려진 텍스트 및 바이너리 데이터 형식을 지원해요. 덕분에 거의 모든 데이터 파이프라인에 쉽게 통합하여 ClickHouse의 장점을 활용할 수 있습니다. 지원되는 형식이 70개가 넘으며, 입력 형식과 출력 형식으로 나뉘어요.

출처: 문서

본문

ClickHouse는 대부분의 알려진 텍스트 및 바이너리 데이터 형식을 지원합니다. 이는 거의 모든 작업 중인 데이터 파이프라인에 쉽게 통합하여 ClickHouse의 장점을 활용할 수 있게 해줍니다.

입력 형식 (Input formats)

입력 형식은 다음에 사용됩니다:

  • INSERT 문에 제공된 데이터 파싱
  • File, URL, HDFS 같은 파일 기반 테이블에서 SELECT 쿼리 수행
  • 사전(dictionary) 읽기

올바른 입력 형식을 선택하는 것은 ClickHouse에서 효율적인 데이터 수집에 매우 중요합니다. 70개 이상의 지원 형식 중에서 가장 성능이 좋은 옵션을 선택하면 삽입 속도, CPU 및 메모리 사용, 전체 시스템 효율에 큰 영향을 줄 수 있어요. 이러한 선택을 돕기 위해 형식 간 수집 성능을 벤치마킹했고, 다음과 같은 핵심 시사점을 얻었습니다:

  • Native 형식이 가장 효율적인 입력 형식입니다. 최고의 압축, 가장 낮은 리소스 사용, 최소한의 서버 측 처리 오버헤드를 제공해요.
  • 압축은 필수입니다 - LZ4는 최소한의 CPU 비용으로 데이터 크기를 줄이고, ZSTD는 추가 CPU 사용을 대가로 더 높은 압축률을 제공합니다.
  • 사전 정렬(Pre-sorting)은 적당한 영향을 줍니다. ClickHouse가 이미 효율적으로 정렬하기 때문입니다.
  • 일괄 처리(batching)가 효율성을 크게 향상시킵니다 - 더 큰 배치는 삽입 오버헤드를 줄이고 처리량을 높입니다.

결과와 모범 사례에 대한 자세한 내용은 전체 벤치마크 분석을 읽어 보세요. 전체 테스트 결과는 FastFormats 온라인 대시보드에서 확인할 수 있어요.

출력 형식 (Output formats)

출력에 지원되는 형식은 다음에 사용됩니다:

  • SELECT 쿼리의 결과 정렬
  • 파일 기반 테이블에 대한 INSERT 연산 수행

형식 개요 (Formats overview)

지원되는 형식은 다음과 같습니다:

Format Input Output
TabSeparated
TabSeparatedRaw
TabSeparatedWithNames
TabSeparatedWithNamesAndTypes
TabSeparatedRawWithNames
TabSeparatedRawWithNamesAndTypes
Template
TemplateIgnoreSpaces
CSV
CSVWithNames
CSVWithNamesAndTypes
CustomSeparated
CustomSeparatedIgnoreSpaces
CustomSeparatedIgnoreSpacesWithNames
CustomSeparatedIgnoreSpacesWithNamesAndTypes
CustomSeparatedWithNames
CustomSeparatedWithNamesAndTypes
HiveText
SQLInsert
Values
Vertical
JSON
JSONAsString
JSONAsObject
JSONStrings
JSONColumns
JSONColumnsWithMetadata
JSONCompact
JSONCompactStrings
JSONCompactColumns
JSONEachRow
JSONLines
PrettyJSONEachRow
JSONEachRowWithProgress
JSONStringsEachRow
JSONStringsEachRowWithProgress
JSONCompactEachRow
JSONCompactEachRowWithNames
JSONCompactEachRowWithNamesAndTypes
JSONCompactEachRowWithProgress
JSONCompactStringsEachRow
JSONCompactStringsEachRowWithNames
JSONCompactStringsEachRowWithNamesAndTypes
JSONCompactStringsEachRowWithProgress
JSONObjectEachRow
BSONEachRow
TSKV
Pretty
PrettyNoEscapes
PrettyMonoBlock
PrettyNoEscapesMonoBlock
PrettyCompact
PrettyCompactNoEscapes
PrettyCompactMonoBlock
PrettyCompactNoEscapesMonoBlock
PrettySpace
PrettySpaceNoEscapes
PrettySpaceMonoBlock
PrettySpaceNoEscapesMonoBlock
Prometheus
Protobuf
ProtobufSingle
ProtobufList
Avro
AvroConfluent
Parquet
ParquetMetadata
Arrow
ArrowStream
ORC
One
Npy
RowBinary
RowBinaryWithNames
RowBinaryWithNamesAndTypes
RowBinaryWithDefaults
RowBinaryWithNamesAndTypesAndDefaults
Native
Buffers
Null
Hash
XML
CapnProto
LineAsString
LineAsStringWithNames
LineAsStringWithNamesAndTypes
Regexp
RawBLOB
MsgPack
MySQLDump
MySQLWire
PostgreSQLWire
ODBCDriver2
GeoJSON
DWARF
Markdown
Form
PNG
Puffin
PuffinMetadata

일부 형식 처리 매개변수는 ClickHouse 설정으로 제어할 수 있어요. 자세한 내용은 Settings 섹션을 읽어 보세요. JSON 관련 추가 설정은 JSON format settings 페이지에 문서화되어 있습니다.

형식 스키마 (Format schema)

형식 스키마를 포함하는 파일 이름은 format_schema 설정으로 설정됩니다. Cap'n Proto 및 Protobuf 형식 중 하나를 사용할 때는 이 설정을 설정해야 합니다.

형식 스키마는 콜론으로 구분된 파일 이름과 이 파일의 메시지 유형 이름의 조합입니다. 예: schemafile.proto:MessageType.

파일이 형식에 대한 표준 확장자(예: Protobuf의 경우 .proto)를 가지면 생략할 수 있고, 이 경우 형식 스키마는 schemafile:MessageType처럼 보입니다.

클라이언트를 대화형(interactive) 모드로 데이터를 입력하거나 출력하면 형식 스키마에 지정된 파일 이름은 절대 경로 또는 클라이언트의 현재 디렉토리 기준 상대 경로를 포함할 수 있어요.

클라이언트를 배치(batch) 모드로 사용하면 보안상의 이유로 스키마 경로가 상대적이어야 합니다.

HTTP 인터페이스를 통해 데이터를 입력하거나 출력하면 형식 스키마에 지정된 파일 이름은 서버 구성의 format_schema_path에 지정된 디렉토리에 있어야 합니다.

오류 건너뛰기 (Skipping errors)

CSV, TabSeparated, TSKV, JSONEachRow, Template, CustomSeparated 및 Protobuf 같은 일부 형식은 파싱 오류가 발생하면 손상된 행을 건너뛰고 다음 행의 시작부터 파싱을 계속할 수 있어요. input_format_allow_errors_num 및 input_format_allow_errors_ratio 설정을 참조하세요.

제한 사항:

  • 파싱 오류가 발생한 경우 JSONEachRow는 새 줄(또는 EOF)까지의 모든 데이터를 건너뜁니다. 따라서 오류 수를 올바르게 계산하려면 행이 \n으로 구분되어야 합니다.
  • TemplateCustomSeparated는 마지막 컬럼 뒤의 구분자와 행 사이의 구분자를 사용해 다음 행의 시작을 찾으므로, 둘 중 하나라도 비어 있지 않을 때만 오류 건너뛰기가 작동합니다.

더 알아보기 (Learn more)