← 학습 카테고리

Learn

ClickHouse

47개 모듈 · 현재 38번째

ClickHouse 모듈 38/47 clickhouse-learn-38

JSON 타입 — 각 경로를 독립된 서브컬럼으로 저장한다

ClickHouse JSON 타입 및 WITH 절(CTE)/Materialized CTE 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(sql-reference/data-types/object-data-type, sql-reference/statements/select/with) + 공식 블로그 ClickHouse 공식문서 JSON Data Type, 공식 블로그 A new powerful JSON data type

이 모듈을 다 읽으면

  • JSON 타입이 각 경로를 별도 Dynamic 서브컬럼으로 저장한다는 것과, 이것이 clickhouse-learn-01의 컬럼 지향 원칙을 반정형 데이터에도 유지하는 방법임을 설명할 수 있다
  • JSON 컬럼 타입과 JSON을 그냥 문자열/포맷으로 저장하는 것의 차이를 구분할 수 있다

clickhouse-learn-01에서 다룬 컬럼 지향 저장(같은 컬럼의 값들을 연속 배치해 압축·스캔 효율을 높임)을 전제로, 구조가 미리 정해지지 않은 JSON 데이터에도 이 원칙을 유지하기 위한 전용 컬럼 타입을 정리한다.

컬럼 타입이지 저장 포맷이 아니다

먼저 흔한 오해부터 정리하면, JSON 타입은 '데이터 포맷'이 아니라 '컬럼 타입'이다 — JSONEachRow 같은 입력 포맷으로 JSON을 넣는 것과, 컬럼 자체를 JSON 타입으로 선언하는 것은 별개다. JSONEachRow로 넣어도 각 컬럼이 여전히 일반 typed 컬럼(문자열 등)일 수 있고, 반대로 JSON 타입 컬럼에 값을 넣을 때도 여러 입력 포맷을 쓸 수 있다.

핵심 포인트

  • JSON 타입은 컬럼 타입이지 데이터 포맷(JSONEachRow 등)이 아님 — 둘은 독립적인 개념

각 경로를 독립된 Dynamic 서브컬럼으로 저장한다

JSON 타입의 핵심은 저장 구조다 — 삽입된 JSON의 각 고유 경로(path)를 컬럼 지향 저장 방식 그대로, 각각 독립된 Dynamic 타입 서브컬럼으로 저장한다. clickhouse-learn-01에서 다룬 컬럼 지향 저장의 핵심 이점(같은 종류의 값이 연속으로 모여 있어 압축률이 높고 필요한 컬럼만 읽을 수 있음)이, 미리 스키마를 정하지 않은 JSON 데이터에도 그대로 적용되는 것이다 — 그 결과 JSON의 스키마 유연성을 유지하면서도 완전히 타입이 정해진 일반 컬럼에 가까운 성능을 낸다.

핵심 포인트

  • 삽입된 JSON의 각 고유 경로를 독립된 Dynamic 타입 서브컬럼으로 컬럼 지향 저장 — clickhouse-learn-01의 컬럼 지향 원칙을 반정형 데이터에도 유지
  • 스키마 유연성(JSON)과 타입 컬럼에 가까운 성능(고압축률+필요 서브컬럼만 읽기)을 동시에 확보

Spark VARIANT 타입과의 교차 연결 — 다른 엔진에서 같은 발상이 독립적으로 등장

spark-learn-72에서 다룬 Spark 4.0의 VARIANT 타입도 목적이 같다 — JSON을 매번 재파싱하지 않고 미리 최적화된 형태로 저장해 스키마 유연성과 성능을 동시에 얻으려는 시도다. 다만 구체적 구현은 다르다 — VARIANT는 값 하나를 오프셋 기반 탐색이 가능한 단일 이진 인코딩으로 저장하는 반면, ClickHouse JSON 타입은 각 경로를 아예 별도의 컬럼(서브컬럼)으로 쪼개 저장한다. 두 시스템이 '반정형 데이터를 컬럼형 엔진 안에서 효율적으로 다루기'라는 같은 문제를 서로 다른 이진 표현으로 푼 사례다.

핵심 포인트

  • spark-learn-72의 VARIANT와 목적은 같음(재파싱 없이 반정형 데이터를 효율적으로) — 구현은 다름: VARIANT는 단일 이진 인코딩, ClickHouse JSON은 경로별 독립 서브컬럼
  • 서로 다른 컬럼형 엔진이 '반정형 데이터 효율화'라는 같은 문제를 독립적으로 다른 방식으로 풀어낸 사례