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으로 구분되어야 합니다. Template과CustomSeparated는 마지막 컬럼 뒤의 구분자와 행 사이의 구분자를 사용해 다음 행의 시작을 찾으므로, 둘 중 하나라도 비어 있지 않을 때만 오류 건너뛰기가 작동합니다.