Cassandra CQLテーブル:作成、変更、切り捨ての例

⚡ スマートサマリー

Cassandra テーブル操作には、作成、変更、削除が含まれます。ping、および CQL を使用した列ファミリーの切り捨てについて説明します。このページでは、各コマンド、データ分布を決定する 3 つの主キー形式、および行の削除とテーブルの削除の違いについて説明します。

  • 🏗️ テーブルを作成する: テーブルには、キースペース、列定義、および分布とソート順を固定する主キー句が必要です。
  • 🔑 単一の主キー: 1つの列がパーティションキーとして機能するため、その値を持つすべての行は同じノードに配置されます。
  • 🧩 複合プライマリキー: 最初の列はパーティションを分割し、残りの列はパーティション内の行をクラスタリングしてソートします。
  • 🧮 複合パーティションキー: 2つの列を括弧で囲むと、大きすぎるパーティションが多数の小さなパーティションに分割されます。
  • 会<XNUMXxEXNUMX><XNUMXxXNUMXF>️️<XNUMXxXNUMXF>️️ 制限を変更する: 列は追加または削除できますが、主キー列は決して変更できません。
  • 🗑️ 削除 vs 切り捨て: Dropはスキーマとデータを削除します。Truncateはすべての行を空にしますが、テーブル定義は保持します。

Cassandra テーブルの作成、変更、削除

の構文 Cassandra クエリ言語(CQL)は SQL 言語。

でテーブルを作成する方法 Cassandra

の列ファミリー Cassandra RDBMSテーブルに似ています。列ファミリーはデータの保存に使用されます。

コマンド「テーブルの作成」は、列ファミリーを作成するために使用されます。 Cassandra.

構文

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

1. 主キー: 2つのタイプがあります 主キー.

  • 単一の主キー: 単一の主キーは次の構文で指定されます。

構文

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も設定されます。

例:

ここでは、「Create table」コマンドを実行して、キースペース「University」にテーブル名「Student」を作成します。

Cassandra テーブルの作成

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

「CREATE TABLE」コマンドが正常に実行されると、キースペース「University」内に「Student」テーブルが作成されます。このテーブルには、「RollNo」、「Name」、「dept」の3つの列があります。「RollNo」は主キーです。また、「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;

各フォームは個別の明細書として発行されます。現在のところ、2つの制限が適用されます。 Cassandra リリース:既存の列のデータ型は変更できなくなり、RENAME は主キーのクラスタリング列に対してのみ機能します。

例:

これは、Student テーブルに新しい列を追加するコマンド「Alter Table」のスナップショットです。

Cassandra 他の机

ALTER TABLE University.Student ADD Semester int;

コマンド「Alter Table」が正常に実行されると、「int」データ型の新しい列「Sem​​ester」がテーブル 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 テーブルには XNUMX つのレコードがあります。 これらはテーブル内のレコードです。

Cassandra テーブルの切り捨て

これは、Student テーブルからすべてのデータを削除する、実行されたコマンド「Truncate table」のスナップショットです。

Cassandra テーブルの切り捨て

コマンド「Truncate Table」が正常に実行されると、テーブル Student からすべてのデータが削除されます。

以下は、テーブル Student にレコードが存在しないデータベース状態のスナップショットです。

Cassandra テーブルの切り捨て

Truncateコマンドはクラスタ全体で同時に実行されるため、すべてのノードにアクセス可能である必要があります。いずれかのノードがダウンしている場合、このステートメントは失敗します。これは、部分的なデータが残ってしまうことを防ぐための意図的な安全対策です。

ドロップ vs 切り捨て vs 削除 Cassandra

データを削除するコマンドは3つあり、間違ったコマンドを選択すると、スキーマが破壊されるか、パフォーマンスの問題が残る可能性があります。

Command 除去するもの スキーマは保持されています 費用
ドロップテーブル すべての行とテーブル定義 いいえ 安価。SSTableはスナップショットが作成された後、破棄されます。
切り捨てる すべての行 はい 安価だが、すべてのノードが稼働している必要がある。墓石は作成されない。
DELETE 選択された行または列 はい 大規模になるとコストがかさむ。除去するたびに「圧縮されるまでスキップしなければならない」という墓碑銘が刻まれる。

実務上のルールとしては、テーブル全体をクリアする場合、バルク DELETE よりも TRUNCATE を優先します。なぜなら、数千ものトゥームストーンが存在すると、そのパーティションの以降のすべての読み取りが遅くなるからです。行レベルの削除については、 CQLによる挿入、更新、削除 チュートリアル。

よくあるご質問

いいえ。主キーは物理的なデータ配置を決定するため、作成時に固定されます。変更するには、目的のキーを持つ新しいテーブルを作成し、行を移行する必要があります。

作成時に WITH CLUSTERING ORDER BY (ColumnName DESC) を追加してください。スキーマ内で設定する方が、クエリ実行時に毎回ソートするよりもはるかにコスト効率が良いです。

いいえ。その列はクエリから即座に非表示になりますが、データは圧縮処理によって書き換えられるまで既存のSSTable内に保持されます。スペースは徐々に解放されます。

列リストは正しく変換されますが、AIはパーティションキーとしてサロゲートIDを保持することが多く、その結果、単一行のパーティションが作成されます。読み取り時にキーが選択されるようにクエリパターンを修正してください。

はい、クラスタリング列の欠落、無制限のパーティション、制限を超える可能性のあるコレクション列など、パターンレベルの問題に対応します。操作を行う前に、実際のカーディナリティと照合して確認してください。