구조화된 JSON 로딩
NDJSON (줄바꿈으로 구분된 JSON) 포맷, 즉 ClickHouse에서 JSONEachRow로 알려진 포맷으로 제공되고, 컬럼 이름과 타입이 고정된 구조화된 형태임을 가정합니다. NDJSON은 간결하고 공간 효율이 높아 JSON 로딩에 권장되는 포맷이지만, 입력 및 출력 모두에서 다른 포맷도 지원됩니다.
다음은 Python PyPI 데이터셋의 행을 나타내는 JSON 샘플입니다:
가능한 경우 정적 스키마를 우선 사용하십시오컬럼의 이름과 타입이 고정되어 있고 새 컬럼이 추가될 가능성이 없다면, 운영 환경에서는 항상 정적으로 정의된 스키마를 우선 사용하십시오.JSON 타입은 컬럼의 이름과 타입이 변경될 수 있는 매우 동적인 데이터에 적합합니다. 이 타입은 프로토타이핑과 데이터 탐색에도 유용합니다.
정렬 키여기서는
ORDER BY 절로 정렬 키를 지정했습니다. 정렬 키와 선택 방법에 대한 자세한 내용은 여기를 참조하십시오.*.json.gz 파일을 읽습니다. ClickHouse는 파일 확장자와 내용을 바탕으로 포맷이 JSONEachRow (ndjson)임을 자동으로 추론합니다. ClickHouse가 포맷을 감지하지 못하는 경우, 매개변수 함수를 통해 포맷을 수동으로 지정할 수 있습니다.
압축 파일위 파일도 압축되어 있습니다. ClickHouse가 이를 자동으로 감지하고 처리합니다.
INSERT INTO SELECT를 사용할 수 있습니다:
FORMAT 절을 사용해 문장 내에서 직접 로드할 수도 있습니다. 예:
JSONEachRow 포맷을 사용한다고 가정합니다. 널리 사용되는 다른 JSON 포맷도 지원하며, 이러한 포맷을 로드하는 예시는 여기에서 확인할 수 있습니다.
반정형 JSON 로드하기
JSON 타입으로 이를 처리합니다.
다음은 위의 Python PyPI 데이터셋을 확장한 예시입니다. 여기서는 임의의 키-값 쌍으로 이루어진 tags 컬럼을 추가했습니다.
JSON 타입의 tags 컬럼을 추가로 제공하면 됩니다:
JSON 타입을 사용해야 하는 경우
- 시간에 따라 변경될 수 있는 예측 불가능한 키가 있습니다.
- 타입이 다양한 값을 포함합니다(예: 경로에 문자열이 들어갈 때도 있고 숫자가 들어갈 때도 있습니다).
- 엄격한 타입 지정이 적합하지 않아 스키마 유연성이 필요합니다.
- 알려진 키를 가진 평면 구조:
String과 같은 표준 컬럼 타입을 사용합니다. - 예측 가능한 중첩 구조: 이러한 구조에는 Tuple, 배열, 또는 Nested 타입을 사용합니다.
- 구조는 예측 가능하지만 타입은 달라질 수 있음: 이 경우에는 Dynamic 또는 Variant 타입을 고려하십시오.