CQL 변경 사항
CQL 변경 사항 (CQL Changes)
다음은 CQL 각 버전의 변경 사항을 설명해요.
출처: CQL Changes
본문
3.4.7
- 벡터 유사도 함수 추가 (
18640) - 폐지된 함수
dateOf와unixTimestampOf제거,toTimestamp와toUnixTimestamp로 대체 (18328) - 테이블 컬럼에 마스킹 함수를 부착하는 지원 추가 (
18068) - UNMASK 권한 추가 (
18069) - SELECT_MASKED 권한 추가 (
18070) - 마스킹 함수로 UDF 사용 지원 추가 (
18071) - snake_case 함수 이름 채택, 모든 이전 camelCase 또는 공백 없는 함수 이름 폐지 (
18037) - 새
vector데이터 타입 추가 (18504)
3.4.6
- ALTER 문에서 IF EXISTS와 IF NOT EXISTS 지원 추가 (
16916) - 단일 문에서 여러 권한 GRANT/REVOKE 허용 (
17030) - CQL에서 사전 해시된 비밀번호 (
17334) - WHERE 절 구성 요소와 INSERT/UPDATE 문 값에서 타입 캐스팅 지원 추가 (
14337) - 조건부 UPDATE 및 DELETE 문에서 CONTAINS와 CONTAINS KEY 지원 추가 (
10537) - 키스페이스의 모든 테이블에 권한 부여 허용 (
17027) - 시간 간격으로 집계 허용 (
11871)
3.4.5
- 산술 연산자 지원 추가 (
11935) - 날짜에
+와-연산 추가 (11936) currentTimestamp,currentDate,currentTime,currentTimeUUID함수 추가 (13132)
3.4.4
ALTER TABLE의ALTER가 제거됨. 생성 후 컬럼 타입을 변경할 수 없어요 (12443).ALTER TYPE의ALTER가 제거됨. 생성 후 필드 타입을 변경할 수 없어요 (12443).
3.4.3
- 새
duration데이터 타입 추가 (11873). GROUP BY지원 (10707).INSERT JSON에DEFAULT UNSET옵션 추가로 생략된 컬럼 무시 (11424).- TTL에 대한 합법적 값으로
null허용. 0을 삽입하는 것과 동일하게 취급돼요 (12216).
3.4.2
- 테이블에 0이 아닌
default_time_to_live가 있으면,INSERT나UPDATE문에서 TTL 0을 명시적으로 지정하면 새 쓰기에 만료가 없게 돼요(즉, 명시적 TTL 0은default_time_to_live를 취소해요). 이전에는 그렇지 않았고 TTL을 명시적으로 설정했어도default_time_to_live가 적용됐어요. ALTER TABLE의ADD와DROP이 이제 여러 컬럼을 추가/제거할 수 있어요.SELECT문의 새PER PARTITION LIMIT옵션 (CASSANDRA-7017 참조).User-defined functions는 이제 새UDFContext인터페이스를 통해UDTValue와TupleValue인스턴스를 생성할 수 있어요 (CASSANDRA-10818 참조).User-defined types는 이제 비동결(non-frozen) 형태로 저장될 수 있어서,UPDATE문에서 개별 필드 갱신과DELETE문에서 개별 필드 삭제가 가능해요. (CASSANDRA-7423).
3.4.1
CAST함수 추가.
3.4.0
materialized views지원.- 기본 키 컬럼의 부등식 표현과
IN제한에 대한DELETE지원. - 기본 키 컬럼의
IN제한에 대한UPDATE지원.
3.3.1
TRUNCATE TABLE X구문이TRUNCATE X의 별칭으로 허용됨.
3.3.0
User-defined functions and aggregates지원.- 작은따옴표 문자열 대신 이중 달러(dollar)로 감싼 문자열 리터럴 허용.
- 사용자 기반 인증과 접근 제어를 대체하는 Roles 도입.
- 새
date,time,tinyint,smallint데이터 타입 추가. JSON support추가.- 새 시간 변환 함수 추가 및
dateOf와unixTimestampOf폐지.
3.2.0
User-defined types지원.CREATE INDEX가 이제 컬렉션 컬럼 인덱싱 지원,keys()함수로 맵 컬렉션의 키 인덱싱 포함.- 컬렉션 인덱스는 새
CONTAINS와CONTAINS KEY연산자로 조회 가능. - 고정 길이의 타입 기반 위치 필드 집합을 담는
Tuple types추가. DROP INDEX가 선택적으로 키스페이스 지정 지원.
3.1.7
SELECT문이 클러스터링 컬럼 조합에IN절을 사용해 단일 파티션에서 여러 행 선택 지원.CREATE USER와DROP USER문이 각각IF NOT EXISTS와IF EXISTS구문 지원.
3.1.6
- 새
uuid()메서드 추가. DELETE … IF EXISTS구문 지원.
3.1.5
- 관계에서 클러스터링 컬럼을 그룹화 가능,
WHERE절 참조. static columns지원 추가.
3.1.4
CREATE INDEX가 CUSTOM 인덱스 생성 시 옵션 지정 허용.
3.1.3
timestamp파서에 밀리초 정밀도 형식 추가.
3.1.2
- 유효한 float 상수로
NaN과Infinity추가. 이제 예약 키워드가 됐어요. 드물게 컬럼 식별자(또는 키스페이스/테이블)로 사용하고 있었다면 이제 큰따옴표로 감싸야 해요.
3.1.1
SELECT문이 파티션 키 목록 허용(DISTINCT수정자 사용). CASSANDRA-4536 참조.WHERE절에서c IN ?구문 지원. 이 경우 바인드 변수에 기대되는 값은c타입의 리스트예요.- 명명된 바인드 변수(
?대신:name사용) 사용 가능.
3.1.0
ALTER TABLEDROP옵션 추가.SELECT문이 선택 절에서 별칭 지원. WHERE와 ORDER BY 절의 별칭은 지원되지 않아요.KEYSPACE,TABLE,INDEX에 대한CREATE문이IF NOT EXISTS조건 지원. 마찬가지로DROP문이IF EXISTS조건 지원.INSERT문이 선택적으로IF NOT EXISTS조건 지원,UPDATE가IF조건 지원.
3.0.5
SELECT,UPDATE,DELETE문이 빈IN관계 허용 (CASSANDRA-5626 참조).
3.0.4
- 커스텀
secondary indexes의 구문 갱신. - 파티션 키에 대한 비동등 조건은 절대 지원되지 않음. 정렬 파티셔너조차도 이는 올바르지 않았기 때문(그 순서는 아니었어요 파티션 키 타입의 순서). 대신 파티션 키의 범위 쿼리에는 항상
token메서드를 사용해야 해요 (WHERE clauses참조).
3.0.3
- 커스텀
secondary indexes지원 추가.
3.0.2
constants의 타입 검증 수정. 예를 들어 구현이int컬럼에'2'를 유효한 값으로 허용했고(2와 동일하게 해석),blob값으로42를 허용했어요(42는 blob의 16진수 표현으로 해석). 더 이상 그렇지 않으며, 상수 타입 검증이 더 엄격해졌어요. 어떤 상수가 어떤 타입에 허용되는지data types섹션 참조.- 이전 항목의 타입 검증 수정으로 blob 상수가 도입되어 blob 입력이 가능해졌어요. 이 버전에서는 문자열 상수로 blob을 입력하는 것이 여전히 지원되지만(blob 상수로의 부드러운 전환을 위해), 폐지되었고 향후 버전에서 제거될 거예요. 문자열을 blob으로 사용하고 있었다면 blob 상수로 전환하도록 클라이언트 코드를 ASAP 갱신하세요.
- 네이티브 타입을 blob으로 변환하는 여러 함수도 도입됨. 또한 token 함수가 이제 선택 절에서 허용돼요.
functions섹션 참조.
3.0.1
- 날짜 문자열(및 타임스탬프)이 더 이상 유효한
timeuuid값으로 허용되지 않아요. 날짜 문자열은 유효한timeuuid가 아니므로 이는 혼란스러운 동작을 초래하는 버그였어요. 그러나timeuuid작업을 돕는 다음 새 메서드가 추가됐어요:now,minTimeuuid,maxTimeuuid,dateOf,unixTimestampOf. - float 상수가 지수 표기법 지원. 즉,
4.2E10이 이제 유효한 부동소수점 값이에요.
버전 관리 (Versioning)
CQL 언어의 버전 관리는 Semantic Versioning 지침을 따르고, 버전은 X.Y.Z 형태를 취하며, 여기서 X, Y, Z는 각각 major, minor, patch 레벨을 나타내는 정수 값이에요. Cassandra 릴리스 버전과 CQL 언어 버전 사이에는 상관관계가 없어요.
| 버전 | 설명 |
|---|---|
| Major | 하위 호환되지 않는 변경이 도입될 때 major 버전을 반드시 올려야 해요. 거의 발생하지 않아야 해요. |
| Minor | 새롭지만 하위 호환되는 기능이 도입될 때 minor 버전이 올라가요. |
| Patch | 버그가 수정될 때 patch 버전이 올라가요. |