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 的核心要素:
- 数据类型体系(原生/集合/自定义/元组)
- 关键命令操作(Keyspace/表/索引/CRUD)
- 运算符与函数特性
掌握这些基础,就能高效应对 Cassandra 开发场景。建议结合实际项目实践,加深对分布式查询特性的理解。