JSON 지원

JSON 지원 (JSON Support)

Cassandra 2.2는 SELECTINSERT 문에 JSON 지원을 도입했어요. 이 지원은 CQL API를 근본적으로 바꾸지 않아요(예: 스키마는 여전히 적용돼요). 단지 JSON 문서로 작업할 수 있는 편리한 방법을 제공할 뿐이에요.

출처: JSON Support

본문

SELECT JSON

SELECT 문에서 JSON 키워드는 각 행을 단일 JSON 인코딩 맵으로 반환하는 데 사용돼요. SELECT 문의 나머지 동작은 동일해요.

결과 맵 키는 일반 결과 집합의 컬럼 이름과 일치해요. 예를 들어 SELECT JSON a, ttl(b) FROM … 같은 문은 "a""ttl(b)" 키를 가진 맵을 만들어요. 단, 주목할 만한 예외가 하나 있어요. INSERT JSON 동작과의 대칭을 위해, 대문자를 가진 대소문자 구분 컬럼 이름은 큰따옴표로 감싸져요. 예를 들어 SELECT JSON myColumn FROM …은 이스케이프된 따옴표를 가진 "\"myColumn\"" 맵 키를 만들어요.

맵 값은 결과 집합 값의 JSON 인코딩 표현(아래 설명)이에요.

INSERT JSON

INSERT 문에서 새 JSON 키워드는 JSON 인코딩 맵을 단일 행으로 삽입할 수 있게 해 줘요. JSON 맵의 형식은 일반적으로 같은 테이블의 SELECT JSON 문이 반환하는 것과 일치해야 해요. 특히 대소문자 구분 컬럼 이름은 큰따옴표로 감싸야 해요. 예를 들어 "myKey"와 "value"라는 두 컬럼이 있는 테이블에 삽입하려면 다음과 같이 해요.

INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}';

기본적으로(또는 DEFAULT NULL을 명시적으로 사용하면) JSON 맵에서 생략된 컬럼은 NULL로 설정돼요. 즉, 그 컬럼의 기존 값이 제거되고(그로 인해 tombstone이 생성됨)돼요. 반대로 값 뒤에 DEFAULT UNSET 지시어를 사용하면 생략된 컬럼 값은 unset 상태로 남아 기존 값이 보존돼요.

Cassandra 데이터 타입의 JSON 인코딩

가능한 경우 Cassandra는 데이터 타입을 네이티브 JSON 표현으로 나타내고 받아들여요. 또한 Cassandra는 모든 단일 필드 타입에 대해 CQL 리터럴 형식과 일치하는 문자열 표현을 받아들여요. 예를 들어 float, int, UUID, date는 CQL 리터럴 문자열로 표현할 수 있어요. 그러나 컬렉션, 튜플, 사용자 정의 타입 같은 복합 타입은 네이티브 JSON 컬렉션(맵과 리스트) 또는 그 컬렉션의 JSON 인코딩 문자열 표현으로 표현해야 해요.

다음 표는 Cassandra가 INSERT JSON 값(및 from_json() 인자)에서 받아들이는 인코딩과 SELECT JSON 문(및 from_json())에서 데이터를 반환할 때 사용하는 형식을 설명해요.

타입 허용되는 형식 반환 형식 참고
ascii string string JSON의 \u 문자 이스케이프를 사용해요
bigint integer, string integer 문자열은 유효한 64비트 정수여야 해요
blob string string 문자열은 0x 뒤에 짝수 개의 16진수여야 해요
boolean boolean, string boolean 문자열은 "true" 또는 "false"여야 해요
date string string YYYY-MM-DD 형식, timezone UTC
decimal integer, float, string float 클라이언트측 디코더에서 32/64비트 IEEE-754 부동소수점 정밀도를 초과할 수 있어요
double integer, float, string float 문자열은 유효한 정수 또는 float여야 해요
float integer, float, string float 문자열은 유효한 정수 또는 float여야 해요
inet string string IPv4 또는 IPv6 주소
int integer, string integer 문자열은 유효한 32비트 정수여야 해요
list list, string list JSON의 네이티브 리스트 표현을 사용해요
map map, string map JSON의 네이티브 맵 표현을 사용해요
smallint integer, string integer 문자열은 유효한 16비트 정수여야 해요
set list, string list JSON의 네이티브 리스트 표현을 사용해요
text string string JSON의 \u 문자 이스케이프를 사용해요
time string string HH-MM-SS[.fffffffff] 형식의 하루 중 시간
timestamp integer, string string 타임스탬프. 문자열 상수는 timestamps as dates로 입력할 수 있어요. YYYY-MM-DD HH:MM:SS.SSS 형식의 날짜 스탬프가 반환돼요
timeuuid string string Type 1 UUID. UUID 형식은 constant 참조
tinyint integer, string integer 문자열은 유효한 8비트 정수여야 해요
tuple list, string list JSON의 네이티브 리스트 표현을 사용해요
UDT map, string map 필드 이름을 키로 사용하는 JSON의 네이티브 맵 표현
uuid string string UUID 형식은 constant 참조
varchar string string JSON의 \u 문자 이스케이프를 사용해요
varint integer, string integer 가변 길이. 클라이언트측 디코더에서 32/64비트 정수를 오버플로할 수 있어요

from_json() 함수

from_json() 함수는 INSERT JSON과 유사하게 단일 컬럼 값에 대해 사용할 수 있어요. INSERT 문의 VALUES 절 또는 UPDATE, DELETE, SELECT 문의 컬럼 값 중 하나로만 사용할 수 있어요. 예를 들어 SELECT 문의 선택 절에는 사용할 수 없어요.

to_json() 함수

to_json() 함수는 SELECT JSON과 유사하게 단일 컬럼 값에 대해 사용할 수 있어요. SELECT 문의 선택 절에서만 사용할 수 있어요.

더 알아보기 (Learn more)