Cassandra CQL 表:创建、修改和截断示例

⚡ 智能摘要

Cassandra 表操作包括创建、修改和删除ping以及使用 CQL 截断列族。本页解释了每个命令、决定数据分布的三种主键形式,以及删除行和删除表之间的区别。

  • ????️ 创建表: 表需要键空间、列定义和主键子句,以固定分布和排序顺序。
  • ???? 单一主键: 其中一列用作分区键,因此具有该值的每一行都会落到同一个节点上。
  • 🧩 化合物主键: 第一列进行分区,其余列对分区内的行进行聚类和排序。
  • 🧮 复合分区键: 将两列分隔开,可以将过大的分区分割成许多较小的分区。
  • ✏️ 修改限制: 可以添加或删除列,但主键列永远不能更改。
  • 🗑️ 删除与截断: 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 key。数据将根据ColumnName1进行分区,数据将根据ColumnName2进行聚类。 Cluster是对分区内的数据进行排序的过程。

3.复合分区键: 复合分区键由以下语法指定。

句法

PRIMARY KEY ((ColumnName1, ColumnName2), ColumnName3)

在上述语法中,ColumnName1 和 ColumnName2 是复合分区键。数据将基于 ColumnName1 和 ColumnName2 列进行分区,并基于 ColumnName3 进行聚类。如果单个分区上的数据量过大,则可以使用复合分区键。复合分区键用于为数据创建多个分区。

  • With 子句

“With 子句”用于为定义的表指定任何属性及其值。例如,如果你想压缩 Cassandra 表格数据。您可以通过在“With 子句”中指定压缩算法属性值来设置压缩属性。该子句还会设置 CLUSTERING ORDER BY 以反转聚簇列的排序方向,并设置 default_time_to_live 以使每行数据自动过期。

例如:

以下是命令“创建表”的执行,它将在键空间“University”中创建表名“Student”。

Cassandra 创建表

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

成功执行“CREATE TABLE”命令后,将在键空间“University”下创建表“Student”,该表包含列RollNo、Name和dept。RollNo是主键,同时也是分区键,因此每个学生都占用一个单独的单行分区。

Cassandra 改变表格

命令“Alter Table”用于删除列、添加新列、更改列名、更改列类型和更改表的属性。

句法

以下是命令‘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 仅对主键的聚簇列有效。

例如:

这是命令“Alter Table”的快照,它将在表 Student 中添加新列。

Cassandra 改变表格

ALTER TABLE University.Student ADD Semester int;

成功执行命令“Alter Table”后,将在表 Student 中添加一个具有“int”数据类型的新列“Semester”。

以下是显示更新后的学生表的屏幕截图。

Cassandra 改变表格

Cassandra 放置表

命令“Drop table”会删除指定的表及其键空间中的所有数据。删除操作之前,请先执行删除操作。ping 桌子, Cassandra 对数据而不是模式进行快照作为备份。

句法

DROP TABLE IF EXISTS KeyspaceName.TableName;

例如:

这是执行命令“Drop Table”的快照,该命令将从键空间“University”中删除表 Student。

Cassandra 放置表

DROP TABLE University.Student;

成功执行命令“Drop Table”后,表 Student 将从键空间 University 中删除。

以下是显示 Cassandra 当尝试访问不存在的学生表时。

Cassandra 放置表

Cassandra 截断表

命令“Truncate table”将从指定的表中删除所有数据。在截断数据之前, Cassandra 拍摄数据快照作为备份。

句法

TRUNCATE KeyspaceName.TableName;

例如:

Student 表中有三条记录。这些是表中的记录。

Cassandra 截断表

这是执行的命令“Truncate table”的快照,它将从表 Student 中删除所有数据。

Cassandra 截断表

成功执行命令“Truncate Table”后,所有数据将从表 Student 中删除。

这是 Student 表中没有记录的数据库状态快照。

Cassandra 截断表

截断操作要求所有节点都可达,因为它会同时在整个集群中执行。如果任何节点宕机,该语句将失败,这是为了防止遗留部分数据而特意设置的保护机制。

Drop、Truncate 和 Delete 的区别 Cassandra

三个命令都会删除数据,选错命令要么会破坏模式,要么会留下性能问题。

命令 它移除了什么 保留模式 Cost
掉落表 所有行和表定义 没有 成本低廉。SSTable 会被创建快照,然后丢弃。
截短 所有行 是 价格便宜,但需要所有节点都处于运行状态。不会生成墓碑。
删除 选定的行或列 是 大规模移除成本高昂。每次移除都会在墓碑上留下“必须跳过,直至压实”的字样。

实际操作中,清除整个表时最好使用 TRUNCATE 而不是批量 DELETE,因为成千上万个墓碑标记会减慢后续对该分区的每次读取速度。行级删除将在后续章节中介绍。 CQL插入、更新和删除 教程。

常见问题

不。主键决定数据的物理位置,因此在创建时就已确定。更改主键意味着创建一个具有所需键的新表,然后将数据行迁移过去。

在创建表时添加 WITH CLUSTERING ORDER BY (ColumnName DESC)。在模式中设置排序比在每次读取时都进行查询排序的开销要小得多。

不。该列会立即对查询隐藏,但其数据仍保留在现有的 SSTable 中,直到压缩操作将其重写。空间会逐步回收。

列列表转换正常,但 AI 通常会使用代理 ID 作为分区键,这会导致分区只有一行。请重新表述查询模式,以便读取时选择该键。

是的,对于模式级别的问题,例如缺少聚类列、分区无界或集合列可能超出限制,请在采取行动前确认实际基数。

总结一下这篇文章: