CQL 변경 사항

CQL 변경 사항 (CQL Changes)

다음은 CQL 각 버전의 변경 사항을 설명해요.

출처: CQL Changes

본문

3.4.7

  • 벡터 유사도 함수 추가 (18640)
  • 폐지된 함수 dateOfunixTimestampOf 제거, toTimestamptoUnixTimestamp로 대체 (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 TABLEALTER가 제거됨. 생성 후 컬럼 타입을 변경할 수 없어요 (12443).
  • ALTER TYPEALTER가 제거됨. 생성 후 필드 타입을 변경할 수 없어요 (12443).

3.4.3

  • duration 데이터 타입 추가 (11873).
  • GROUP BY 지원 (10707).
  • INSERT JSONDEFAULT UNSET 옵션 추가로 생략된 컬럼 무시 (11424).
  • TTL에 대한 합법적 값으로 null 허용. 0을 삽입하는 것과 동일하게 취급돼요 (12216).

3.4.2

  • 테이블에 0이 아닌 default_time_to_live가 있으면, INSERTUPDATE 문에서 TTL 0을 명시적으로 지정하면 새 쓰기에 만료가 없게 돼요(즉, 명시적 TTL 0은 default_time_to_live를 취소해요). 이전에는 그렇지 않았고 TTL을 명시적으로 설정했어도 default_time_to_live가 적용됐어요.
  • ALTER TABLEADDDROP이 이제 여러 컬럼을 추가/제거할 수 있어요.
  • SELECT 문의 새 PER PARTITION LIMIT 옵션 (CASSANDRA-7017 참조).
  • User-defined functions는 이제 새 UDFContext 인터페이스를 통해 UDTValueTupleValue 인스턴스를 생성할 수 있어요 (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 추가.
  • 새 시간 변환 함수 추가 및 dateOfunixTimestampOf 폐지.

3.2.0

  • User-defined types 지원.
  • CREATE INDEX가 이제 컬렉션 컬럼 인덱싱 지원, keys() 함수로 맵 컬렉션의 키 인덱싱 포함.
  • 컬렉션 인덱스는 새 CONTAINSCONTAINS KEY 연산자로 조회 가능.
  • 고정 길이의 타입 기반 위치 필드 집합을 담는 Tuple types 추가.
  • DROP INDEX가 선택적으로 키스페이스 지정 지원.

3.1.7

  • SELECT 문이 클러스터링 컬럼 조합에 IN 절을 사용해 단일 파티션에서 여러 행 선택 지원.
  • CREATE USERDROP USER 문이 각각 IF NOT EXISTSIF 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 상수로 NaNInfinity 추가. 이제 예약 키워드가 됐어요. 드물게 컬럼 식별자(또는 키스페이스/테이블)로 사용하고 있었다면 이제 큰따옴표로 감싸야 해요.

3.1.1

  • SELECT 문이 파티션 키 목록 허용(DISTINCT 수정자 사용). CASSANDRA-4536 참조.
  • WHERE 절에서 c IN ? 구문 지원. 이 경우 바인드 변수에 기대되는 값은 c 타입의 리스트예요.
  • 명명된 바인드 변수(? 대신 :name 사용) 사용 가능.

3.1.0

  • ALTER TABLE DROP 옵션 추가.
  • SELECT 문이 선택 절에서 별칭 지원. WHERE와 ORDER BY 절의 별칭은 지원되지 않아요.
  • KEYSPACE, TABLE, INDEX에 대한 CREATE 문이 IF NOT EXISTS 조건 지원. 마찬가지로 DROP 문이 IF EXISTS 조건 지원.
  • INSERT 문이 선택적으로 IF NOT EXISTS 조건 지원, UPDATEIF 조건 지원.

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 버전이 올라가요.

더 알아보기 (Learn more)