JSONEachRow (NDJSON)를 사용한다고 가정합니다. 이 포맷은 각 JSON 줄의 키를 컬럼으로 읽어들입니다. 예시는 다음과 같습니다:
객체로 JSON 읽기
JSONEachRow가 줄바꿈으로 구분된 JSON을 읽는 방식을 보여주었습니다. 각 줄은 별도의 객체로 읽혀 테이블의 한 행에 매핑되고, 각 키는 컬럼에 매핑됩니다. 이 방식은 각 컬럼의 타입이 하나로 고정된, 예측 가능한 JSON에 적합합니다.
반면 JSONAsObject는 각 줄을 하나의 JSON 객체로 처리해 JSON 타입의 단일 컬럼에 저장하므로, 중첩된 JSON payload나 키가 동적이고 하나 이상의 타입을 가질 수 있는 경우에 더 적합합니다.
행 단위 삽입에는 JSONEachRow를 사용하고, 유연하거나 동적인 JSON 데이터를 저장할 때는 JSONAsObject를 사용하십시오.
위 예시와 비교해 보면, 다음 쿼리는 동일한 데이터를 각 줄마다 하나의 JSON 객체로 읽습니다:
JSONAsObject는 단일 JSON 객체 컬럼을 사용해 테이블에 행을 삽입할 때 유용합니다. 예:
JSONAsObject 포맷은 객체 구조가 일관되지 않은 경우에도 줄바꿈으로 구분된 JSON을 읽는 데 유용할 수 있습니다. 예를 들어, 어떤 키의 타입이 행마다 달라질 수 있습니다(어떤 경우에는 문자열이지만, 다른 경우에는 객체일 수 있음). 이런 경우 ClickHouse는 JSONEachRow로 안정적인 스키마를 추론할 수 없으며, JSONAsObject를 사용하면 엄격한 타입 검증 없이 데이터를 수집하고 각 JSON 행 전체를 하나의 컬럼에 저장할 수 있습니다. 예를 들어, 다음 예시에서 JSONEachRow가 어떻게 실패하는지 확인해 보십시오:
JSON 타입은 동일한 서브컬럼에 대해 여러 타입을 지원하므로 이 경우 JSONAsObject를 사용할 수 있습니다.
JSON 객체 배열
JSONEachRow 포맷을 사용할 수 있습니다(list.json 파일에서 데이터를 삽입):
JSON 객체의 키
JSONObjectEachRow 포맷을 사용하여 이러한 종류의 데이터로부터 데이터를 로드할 수 있습니다.
상위 객체 키 값 지정
file() 함수를 사용해 원본 JSON 파일에서 어떤 데이터가 로드되는지 확인할 수 있습니다:
id 컬럼이 키 값으로 올바르게 채워진 것을 확인하세요.
JSON 배열
JSONCompactEachRow 포맷을 사용합니다:
JSON 배열에서 개별 컬럼 가져오기
JSONColumns 포맷을 사용합니다:
JSONCompactColumns 포맷도 지원됩니다:
파싱하지 않고 JSON 객체 저장하기
String(또는 JSON) 컬럼에 저장하는 편이 나은 경우도 있습니다. 이는 구조가 서로 다른 JSON 객체 목록을 다룰 때 유용합니다. 예를 들어 이 파일에는 상위 목록 안에 서로 다른 JSON 객체가 여러 개 들어 있습니다:
JSONAsString 포맷을 사용해 파일의 데이터를 이 테이블로 로드할 수 있습니다:
JSONAsString은 JSON 객체가 줄마다 하나씩 있는 형식의 파일(일반적으로 JSONEachRow 포맷과 함께 사용됨)에서 문제없이 작동합니다.
중첩된 객체용 스키마
Array, JSON 또는 Tuple)을 사용해 데이터를 로드할 수 있습니다:
중첩된 JSON 객체에 접근하기
알 수 없는 컬럼 건너뛰기
month 컬럼이 없는 테이블로 원본 파일을 가져와 보겠습니다:
BSON
out.bson 파일로 내보내집니다.