Cassandra CQL 테이블: 생성, 변경 및 삭제 예제

⚡ 스마트 요약

Cassandra 테이블 작업에는 생성, 수정, 삭제가 포함됩니다.pingCQL을 사용하여 컬럼 패밀리를 잘라내는 방법에 대해서도 설명합니다. 이 페이지에서는 각 명령어, 데이터 분포를 결정하는 세 가지 기본 키 형식, 그리고 행을 제거하는 것과 테이블을 제거하는 것의 차이점을 설명합니다.

  • 🏗️ 테이블 생성: 테이블에는 키스페이스, 열 정의, 그리고 데이터 분포와 정렬 순서를 지정하는 기본 키 절이 필요합니다.
  • 🔑 단일 기본 키: 한 열이 파티션 키 역할을 하므로 해당 값의 모든 행은 동일한 노드에 저장됩니다.
  • 🧩 복합 기본 키: 첫 번째 열을 기준으로 파티션을 나누고, 나머지 열은 파티션 내의 행들을 그룹화하고 정렬합니다.
  • 🧮 복합 파티션 키: 두 열을 괄호로 묶으면 큰 파티션이 여러 개의 작은 파티션으로 나뉩니다.
  • ✏️ 제한 변경: 열을 추가하거나 삭제할 수 있지만 기본 키 열은 절대 변경할 수 없습니다.
  • 🗑️ 삭제 vs. 잘라내기: `drop`은 스키마와 데이터를 모두 제거하고, `truncate`는 모든 행을 비우지만 테이블 정의는 유지합니다.

Cassandra 테이블 생성, 수정, 삭제

구문 Cassandra 질의 언어(CQL)는 다음과 유사합니다. SQL 언어.

테이블을 만드는 방법 Cassandra

컬럼 패밀리 Cassandra RDBMS 테이블과 유사합니다. 컬럼 패밀리는 데이터를 저장하는 데 사용됩니다.

'Create Table' 명령은 컬럼 패밀리를 생성하는 데 사용됩니다. Cassandra.

통사론

CREATE TABLE KeyspaceName.TableName (
    ColumnName DataType,
    ColumnName DataType,
    ColumnName DataType,
    PRIMARY KEY (ColumnName)
) WITH PropertyName = PropertyValue;

1. 기본 키: 두 종류의가 있습니다 기본 키.

  • 단일 기본 키: 단일 기본 키는 다음 구문을 통해 지정됩니다.

통사론

PRIMARY KEY (ColumnName)

단일 기본 키에는 열이 하나만 있습니다. 해당 열을 분할 키라고도 합니다. 데이터는 해당 열을 기준으로 분할됩니다. 데이터는 파티션 키를 기준으로 여러 노드에 분산됩니다.

2. 복합 기본 키: 복합 기본 키는 다음 구문으로 지정됩니다.

통사론

PRIMARY KEY (ColumnName1, ColumnName2, ...)

위 구문에서 ColumnName1은 분할 키이고 ColumnName2는 분할 키입니다. Clustering 키. 데이터는 ColumnName1을 기준으로 분할되고 데이터는 ColumnName2를 기준으로 클러스터링됩니다. Clustering은 파티션의 데이터를 정렬하는 프로세스입니다.

3. 복합 분할 키: 복합 분할 키는 다음 구문을 통해 지정됩니다.

통사론

PRIMARY KEY ((ColumnName1, ColumnName2), ColumnName3)

위 구문에서 ColumnName1과 ColumnName2는 복합 파티션 키입니다. 데이터는 ColumnName1과 ColumnName2 두 열을 기준으로 파티션되고, ColumnName3을 기준으로 클러스터링됩니다. 단일 파티션에 너무 많은 데이터가 있는 경우 복합 파티션 키를 사용합니다. 복합 파티션 키는 데이터를 여러 파티션으로 나누는 데 사용됩니다.

  • 조항 포함

"With 절"은 정의된 테이블에 대한 속성과 해당 값을 지정하는 데 사용됩니다. 예를 들어 압축하려는 경우 Cassandra 테이블 데이터입니다. "With 절"에서 압축 알고리즘 속성 값을 지정하여 압축 속성을 설정할 수 있습니다. 동일한 절에서 클러스터링 열의 정렬 방향을 반전시키는 CLUSTERING ORDER BY와 모든 행이 자동으로 만료되도록 하는 default_time_to_live도 설정할 수 있습니다.

예시

다음은 키스페이스 'University'에 테이블 이름 'Student'를 생성하는 'Create table' 명령의 실행입니다.

Cassandra 표 만들기

CREATE TABLE University.Student (
    RollNo int,
    Name text,
    dept text,
    PRIMARY KEY (RollNo)
);

'테이블 생성' 명령이 성공적으로 실행되면 'University' 키스페이스에 RollNo, Name, dept 열을 가진 'Student' 테이블이 생성됩니다. RollNo는 기본 키이며 파티션 키이기도 하므로 각 학생은 개별 단일 행 파티션을 차지합니다.

Cassandra 테이블 변경

테이블 변경 명령은 컬럼 삭제, 새 컬럼 추가, 컬럼 이름 변경, 컬럼 유형 변경, 테이블 속성 변경 등의 작업을 수행하는 데 사용됩니다.

통사론

'Alter Table' 명령의 구문은 다음과 같습니다.

ALTER TABLE KeyspaceName.TableName
    ADD ColumnName ColumnDataType;

ALTER TABLE KeyspaceName.TableName
    DROP ColumnName;

ALTER TABLE KeyspaceName.TableName
    RENAME ColumnName TO NewColumnName;

ALTER TABLE KeyspaceName.TableName
    WITH PropertyName = PropertyValue;

각 양식은 별도의 명세서로 발행됩니다. 현재 두 가지 제한 사항이 적용됩니다. Cassandra 릴리스 내용: 기존 열의 데이터 형식을 더 이상 변경할 수 없으며, RENAME 작업은 기본 키의 클러스터링 열에서만 작동합니다.

예시

다음은 Student 테이블에 새 열을 추가하는 'Alter Table' 명령의 스냅샷입니다.

Cassandra 테이블 변경

ALTER TABLE University.Student ADD Semester int;

'Alter Table' 명령을 성공적으로 실행하면 데이터 유형이 'int'인 새 열 'Semester'가 Student 테이블에 추가됩니다.

다음은 업데이트된 Student 테이블을 보여주는 스크린샷입니다.

Cassandra 테이블 변경

Cassandra 테이블 삭제

'Drop table' 명령어는 지정된 테이블과 해당 키스페이스의 모든 데이터를 삭제합니다. 삭제하기 전에ping 테이블, Cassandra 스키마가 아닌 데이터의 스냅샷을 백업으로 가져옵니다.

통사론

DROP TABLE IF EXISTS KeyspaceName.TableName;

예시

다음은 키스페이스 'University'에서 Student 테이블을 삭제하는 실행된 명령 'Drop Table'의 스냅샷입니다.

Cassandra 테이블 삭제

DROP TABLE University.Student;

'Drop Table' 명령을 성공적으로 실행하면 테이블 Student가 키스페이스 University에서 삭제됩니다.

다음은 반환된 오류를 보여주는 스냅샷입니다. Cassandra 존재하지 않는 Student 테이블에 액세스하려고 할 때.

Cassandra 테이블 삭제

Cassandra 테이블 자르기

'Truncate table' 명령은 지정된 테이블에서 모든 데이터를 제거합니다. 데이터를 자르기 전에, Cassandra 데이터의 스냅샷을 백업으로 가져옵니다.

통사론

TRUNCATE KeyspaceName.TableName;

예시

Student 테이블에는 세 개의 레코드가 있습니다. 테이블에 있는 기록들입니다.

Cassandra 테이블 자르기

다음은 Student 테이블에서 모든 데이터를 제거하는 'Truncate table' 명령을 실행한 스냅샷입니다.

Cassandra 테이블 자르기

'Truncate Table' 명령을 성공적으로 실행하면 Student 테이블에서 모든 데이터가 제거됩니다.

다음은 Student 테이블에 레코드가 없는 데이터베이스 상태의 스냅샷입니다.

Cassandra 테이블 자르기

Truncate 명령은 클러스터 전체에서 동시에 실행되므로 모든 노드에 접근 가능해야 합니다. 노드 중 하나라도 다운되면 명령 실행이 실패하는데, 이는 불완전한 데이터가 남는 것을 방지하기 위한 의도적인 안전 장치입니다.

삭제 vs 잘라내기 vs 삭제 Cassandra

세 가지 명령어가 데이터를 삭제하는데, 잘못된 명령어를 선택하면 스키마가 손상되거나 성능 문제가 발생할 수 있습니다.

Command 제거되는 것 스키마가 유지됨 비용
드롭 테이블 모든 행과 테이블 정의 아니 저렴합니다. SSTable은 스냅샷으로 저장된 후 삭제됩니다.
자르기 모든 행 가능 저렴하지만 모든 노드가 작동 중이어야 합니다. 묘비는 생성되지 않습니다.
삭제 선택한 행 또는 열 가능 대규모로 진행하면 비용이 많이 듭니다. 제거할 때마다 다짐이 완료될 때까지 건너뛰어야 한다는 내용이 적힌 비석이 세워집니다.

테이블 전체를 삭제할 때는 대량 삭제(DELETE)보다는 TRUNCATE를 사용하는 것이 실질적인 규칙입니다. 수천 개의 툼스톤(tombstone)이 해당 파티션을 이후에 읽을 때마다 속도를 저하시키기 때문입니다. 행 단위 삭제는 다음에서 다룹니다. CQL 삽입, 업데이트 및 삭제 튜토리얼.

자주 묻는 질문

아니요. 기본 키는 물리적인 데이터 배치 위치를 결정하므로 테이블 생성 시 고정됩니다. 기본 키를 변경하려면 원하는 키를 가진 새 테이블을 생성하고 기존 행을 새 테이블로 옮겨야 합니다.

생성 시점에 WITH CLUSTERING ORDER BY (ColumnName DESC)를 추가하세요. 스키마에 설정하는 것이 매번 읽을 때마다 쿼리 시점에 정렬하는 것보다 훨씬 효율적입니다.

아니요. 해당 열은 쿼리에서 즉시 숨겨지지만, 해당 데이터는 압축으로 인해 기존 SSTable이 다시 작성될 때까지 기존 SSTable 내에 남아 있습니다. 공간은 점진적으로 회수됩니다.

컬럼 목록은 깔끔하게 변환되지만, AI는 종종 파티션 키로 대체 ID를 유지하여 단일 행 파티션을 생성합니다. 읽기 작업에 사용할 키를 선택하도록 쿼리 패턴을 다시 작성하세요.

예, 클러스터링 열 누락, 무한 파티션 또는 제한을 초과할 가능성이 있는 컬렉션 열과 같은 패턴 수준 문제의 경우 그렇습니다. 조치를 취하기 전에 실제 카디널리티를 확인하십시오.

이 게시물을 요약하면 다음과 같습니다.