1. 引言

学习新工具时,一份快速参考指南能极大提升效率。速查表(cheat sheet)正是这种包含核心信息的文档。本文将带你构建 Cassandra 查询语言(CQL)的速查表,掌握其核心概念与应用技巧。

2. Cassandra 快速概览

Apache Cassandra 是开源的 NoSQL 分布式数据存储系统。它摒弃单服务器架构,将数据分散在多个服务器上,以高可用性和分区容错性著称。

核心特点

  • 设计遵循 CAP 定理中的 AP 原则
  • 采用无主架构(masterless)
  • 支持大规模水平扩展
  • 内置故障检测与恢复机制

3. 数据类型

Cassandra 支持丰富的数据类型,包括原生类型、集合类型、用户自定义类型和元组类型。

3.1 原生类型

字符串类型

类型 支持常量 说明
ascii string ASCII 字符串
inet string IPv4/IPv6 地址字符串
text string UTF8 编码字符串
varchar string UTF8 编码字符串

布尔类型

类型 支持常量 说明
boolean boolean true 或 false

二进制类型

类型 支持常量 说明
blob blob 任意字节流

时长类型

类型 支持常量 说明
duration duration 表示月/日/纳秒的值

整数类型

类型 支持常量 说明
tinyint integer 8 位有符号整数
smallint integer 16 位有符号整数
int integer 32 位有符号整数
bigint integer 64 位有符号长整型
variant integer 任意精度整数
counter integer 计数器列(64 位有符号)

浮点类型

类型 支持常量 说明
decimal integer, float 可变精度十进制数
double integer, float 64 位浮点数
float integer, float 32 位浮点数

日期时间类型

类型 支持常量 说明
date integer, string 日期值(不含时间)
time integer, string 时间值(不含日期)
timestamp integer, string 时间戳(含日期和时间)

UUID 类型

类型 支持常量 说明
uuid uuid 任意版本 UUID
timeuuid uuid 版本 1 UUID

3.2 集合类型

传统关系型数据库中,多值字段需拆分为独立表(如用户多邮箱)。Cassandra 通过集合类型解决此问题:

  • set:存储唯一值,无序
  • list:允许重复值,保留插入顺序
  • map:键值对形式存储数据

3.3 用户自定义类型

允许将多个数据字段组合为单列:

CREATE TYPE student.basic_info (
  birthday timestamp,
  race text,
  weight text,
  height text
);

3.4 元组类型

元组是用户自定义类型的轻量替代方案,使用尖括号定义:

-- 创建元组表
CREATE TABLE subjects (
  k int PRIMARY KEY,
  v tuple<int, text, float>
);

-- 插入数据
INSERT INTO subjects (k, v) VALUES(0, (3, 'cs', 2.1));

-- 查询数据
SELECT * FROM subjects;

4. Cassandra CQL 命令

4.1 Keyspace 命令

关键概念:Keyspace 类似于 RDBMS 中的数据库,是数据的最外层容器,定义复制策略等属性。建议每个应用使用独立 keyspace。

命令 示例 说明
CREATE keyspace CREATE KEYSPACE my_keyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 2}; 创建 keyspace
DESCRIBE keyspace DESCRIBE KEYSPACES; 列出所有 keyspace
USE keyspace USE my_keyspace; 连接客户端到指定 keyspace
ALTER keyspace ALTER KEYSPACE my_keyspace WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 3} AND DURABLE_WRITES = false; 修改 keyspace 属性
DROP keyspace DROP KEYSPACE my_keyspace; 删除 keyspace

4.2 表命令

注意:Cassandra 中表也称为列族(column family),创建时必须定义主键。

命令 示例 说明
CREATE table CREATE TABLE users (id UUID PRIMARY KEY, name text, email text, created_at timestamp); 创建表
ALTER table ALTER TABLE users ADD age int; 添加新列
ALTER table ALTER TABLE users ALTER age TYPE smallint; 修改列数据类型
ALTER table ALTER TABLE users WITH caching = {'keys' : 'NONE', 'rows_per_partition' : '1'}; 修改表属性
DROP table DROP TABLE users; 删除表
TRUNCATE table TRUNCATE users; 清空表数据(不可恢复)

4.3 索引命令

踩坑提醒:主键默认已索引,不可重复创建索引。

命令 示例 说明
CREATE index CREATE INDEX idx_email ON users (email); 创建索引
DELETE index DROP INDEX IF EXISTS idx_email; 删除索引

4.4 基础命令

命令 示例 说明
INSERT INSERT INTO users (name, email) VALUES('Alice', 'alice@example.com'); 插入数据
SELECT SELECT * FROM users; 查询表数据
WHERE SELECT * FROM users WHERE name = 'Alice'; 条件过滤查询
UPDATE UPDATE users SET email = 'new@example.com' WHERE name = 'Alice'; 更新数据
DELETE DELETE email FROM users WHERE name = 'Alice'; 删除指定列数据

4.5 其他命令

排序与分组

命令 示例 说明
ORDER BY SELECT * FROM users WHERE id = 123 ORDER BY created_at ASC; 必须在 WHERE 中指定分区键,按聚集列排序
GROUP BY SELECT department FROM users GROUP BY department; 仅支持分区键或(分区键+聚集列)分组

结果限制

命令 示例 说明
LIMIT SELECT * FROM users LIMIT 3; 限制返回行数

5. 运算符

Cassandra 支持算术运算符(+, -, *, /, %, -)和条件运算符。

WHERE 子句常用条件运算符

  • CONTAINS:集合包含判断
  • CONTAINS KEY:Map 键存在判断
  • IN:多值匹配
  • 比较运算符:=, >, >=, <, <=

注意:条件运算符使用需遵循 Cassandra 查询限制(如需指定分区键)。

6. 常用函数

聚合函数

  • MIN(), MAX(), SUM(), AVG()

标量函数

  • Blob 转换函数:二进制数据处理
  • UUID/TimeUUID 函数:UUID 生成与操作
  • Token 函数:分区键哈希值计算
  • WRITETIME:获取列写入时间戳
  • TTL:获取列生存时间(Time-To-Live)

扩展:除原生函数外,Cassandra 支持用户自定义函数(UDF)和聚合函数。

7. 总结

本文系统梳理了 Cassandra CQL 的核心要素:

  1. 数据类型体系(原生/集合/自定义/元组)
  2. 关键命令操作(Keyspace/表/索引/CRUD)
  3. 运算符与函数特性

掌握这些基础,就能高效应对 Cassandra 开发场景。建议结合实际项目实践,加深对分布式查询特性的理解。


原始标题:Cassandra Query Cheat Sheet