Apache Cassandra CQL 2.0 查询语言全面解析
概述
Apache Cassandra 是一个高度可扩展的分布式 NoSQL 数据库系统,而 CQL (Cassandra Query Language) 则是其主要的查询接口。本文将深入解析 CQL 2.0 版本的语法规范和使用方法,帮助开发者更好地理解和使用 Cassandra。
语法约定
CQL 采用类似 BNF (Backus-Naur Form) 的语法描述方式:
- 非终结符用
<尖括号>表示 - 终结符用
'单引号'括起来 ?表示可选元素(出现 0 或 1 次)*表示可重复元素(出现 0 或多次)()用于元素分组
注释支持三种形式:
- 单行注释:
--或// - 多行注释:
/* ... */
数据类型系统
Cassandra 提供了丰富的数据类型支持:
| 类型 | 描述 | |------|------| | ascii | ASCII 字符串 | | bigint | 64位有符号长整型 | | blob | 二进制数据 | | boolean | 布尔值 | | counter | 计数器列(64位长整型) | | decimal | 可变精度十进制数 | | double | 64位 IEEE-754 浮点数 | | float | 32位 IEEE-754 浮点数 | | int | 32位有符号整型 | | text | UTF-8 编码字符串 | | timestamp | 时间戳 | | uuid | UUID (类型1或4) | | varchar | UTF-8 编码字符串 | | varint | 任意精度整数 |
时间戳处理
时间戳类型支持多种输入格式:
- 毫秒数:直接使用长整型表示
- ISO 8601 格式字符串:
2011-02-03 04:05+00002011-02-03T04:05:00+0000- 可省略时区(但不推荐)
核心语句详解
USE 语句
USE myKeyspace;
设置当前会话的默认 keyspace,后续操作将在此 keyspace 下执行。
SELECT 查询
基本语法结构:
SELECT 列表达式 FROM [keyspace.]表名
[USING CONSISTENCY 一致性级别]
[WHERE 条件]
[LIMIT 行数];
列表达式形式
-
指定列名:
SELECT col1, col2 FROM table; -
列范围:
SELECT col1..col100 FROM table; SELECT FIRST 10 REVERSED col100..col1 FROM table; -
计数查询:
SELECT COUNT(*) FROM table;
条件过滤
支持多种条件表达式:
-- 精确匹配
WHERE key = 'value'
-- 范围查询
WHERE key >= 'A' AND key <= 'Z'
-- IN 查询
WHERE key IN ('k1', 'k2', 'k3')
数据修改语句
INSERT 插入
INSERT INTO table (key, col1, col2)
VALUES ('k1', 'v1', 'v2')
[USING TTL 秒数 AND TIMESTAMP 时间戳];
UPDATE 更新
UPDATE table [USING TTL 秒数 AND TIMESTAMP 时间戳]
SET col1 = val1, col2 = val2
WHERE key = 'k1';
-- 计数器操作
UPDATE counters SET count = count + 1 WHERE key = 'k1';
DELETE 删除
-- 删除特定列
DELETE col1, col2 FROM table WHERE key = 'k1';
-- 删除整行
DELETE FROM table WHERE key IN ('k1', 'k2');
高级特性
一致性级别控制
CQL 允许为每个操作指定一致性级别:
SELECT ... USING CONSISTENCY QUORUM;
UPDATE ... USING CONSISTENCY ALL;
TTL (Time To Live)
可以为数据设置生存时间:
INSERT INTO data (key, value) VALUES ('k1', 'v1') USING TTL 3600;
批量操作
支持批量执行多个修改操作:
BEGIN BATCH
INSERT INTO table1 (...) VALUES (...);
UPDATE table2 SET ... WHERE ...;
DELETE FROM table3 WHERE ...;
APPLY BATCH;
最佳实践
- 总是为时间戳指定时区,避免时区混淆问题
- 合理使用 TTL 自动清理过期数据
- 根据业务需求选择适当的一致性级别
- 对计数器列使用专门的 counter 类型
- 批量操作时注意不要超过单个批次的大小限制
通过掌握这些 CQL 语法和特性,开发者可以更高效地使用 Cassandra 构建高性能的分布式应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



