Cassandra 可以使用 cqlsh 进行管理, 使用的语法格式为 CQL。
cqlsh位于Cassandra的bin目录,cqlsh需要python支持。在使用cqlsh 之前需要安装python , 我这里选用的是python 2.7
查看是否安装python
指令:
python --version
没安装的同学请从网上 下载python
下面的演示全部都是在Linux 下, Windows下XShell 连接(这个不是重点)。
启动cqlsh
命令:
python cqlsh
下面讲解下CQL 操作 Cassandra, CQL 与 关系型的数据库操作语句 有 90%相似。
以下的命令都可以通过 help; (注意 ; , Cassandra下的所有指令都以 ; 结尾)
============== CQL讲解 ==========
键空间 KEYSPACE
创建 KEYSPACE
注意: 一定要指定策略
策略分类 SimpleStrategy NetworkTopologyStrategy 还有一种被废弃的(不做介绍)
示例:
(1)
(2)
CREATE KEYSPACE
WITH replication = {'class':'NetworkTopologyStrategy', 'DC1':1, 'DC2':2};
===============================
修改KEYSPACE
===============================
查看 KEYSPACE的详细信息
示例:
==================================
删除 KEYSPACE
示例:
列族 COLUMN FAMILY | TABLE
创建列族
CREATE TABLE
[WITH
CREATE TABLE 可以附加的部分属性:
comment 对列族的描述信息。
bloom_filter_fp_chance 指定bloom_filter算法的容错率,一般写0.01或者0.1。
caching 设置缓存方案。
compaction 数据压缩策略。
compression 数据压缩算法。
default_time_to_live 存活时间,默认0(永久存活)。
memtable_flush_period_in_ms 内存数据刷新时间间隔。
read_repair_chance 0-1之间的数值,与数据的一致性有关。
示例:
操作:
查看表的信息
==========================================
修改 Column Family | TABLE (列族) 的信息
ALTER TABLE
示例:
==========================================
增加 Column Family | TABLE (列族) 的列
ALTER
示例:
============================================
删除 Column Family | TABLE (列族) 的列
命令: ALTER TABLE TableName DROP columnName;
示例:
=============================================
删除 Column Family | TABLE (列族)
DROP TABLE tableName:
示例:
================================================
清空 Column Family | TABLE (列族)
命令: TRUNCATE TABLE tableName;
作用: 清空列族内的数据 / 相当于清空表里的数据
示例:
=================================================
索引
创建索引
语法:
CREATE ( CUSTOM )? INDEX ( IF NOT EXISTS )? (
ON
( USING
示例:
===========================================
删除索引
命令:
DROP INDEX INDEX_NAME;
示例:
=========================================
自定义数据类型
创建自定义数据类型
语法:
CREATE TYPE ( IF NOT EXISTS )?
'('
示例:
实际操作:
============================================
修改自定义数据类型:
ALTER TYPE
示例:
操作:
=========================================
删除自定义数据类型
语法:
DROP TYPE ( IF EXISTS )?
示例:
============================================
触发器
触发器的具体操作需要编写Java代码实现
创建触发器
语法:
CREATE TRIGGER ( IF NOT EXISTS )? (
ON
USING
示例:
====================================
删除触发器
语法:
DROP TRIGGER ( IF EXISTS )? (
ON
示例:
==========================================
CQL DML ( CQL 数据操作语法)
插入数据
语法:
INSERT INTO
'('
VALUES '('
( IF NOT EXISTS )?
( USING
示例:
TTL 指的是 数据存活的时间
======================================================
修改数据
UPDATE(改)
语法:
UPDATE
( USING
示例:
===================================================
删除数据
DELETE(删)
语法:
DELETE (
FROM
( USING TIMESTAMP
WHERE
示例:
delete
1.删除指定的列
2.删除指定的行
==============================================
批量操作
BATCH(批量操作)
语法:
BEGIN ( UNLOGGED | COUNTER ) BATCH
( USING
示例:
====================================================
CQL 查询语句
SELECT
语法:
SELECT
FROM
( WHERE
( ORDER BY
( LIMIT
( ALLOW FILTERING )?
示例:
下面进行操作的表的一些基本信息, 表的结构以及数据
知识点:
在WHERE中出现的列名必须是PRIMARY KEY中指定的第一个列名,
或者PRIMARY KEY中其他位置使用CREATE INDEX建立了索引的列名;
如果不建立索引,也可以在结尾加上ALLOW FILTERING这个关键字 (前提是这个字段是PRIMARY KEY)
通常PRIMARY KEY中指定的第一个列名也叫做PARTITION KEY,
它对数据在节点上的分布起到了重要作用
示例:
不是PRIMARY KEY 第一个列名 也没有 索引报错。。。
创建索引后再进行查询后, 可以查到数据
使用COUNT(*) 函数进行统计
集合类型不能用为PRIMARY KEY,但是可以CREATE INDEX
==================================================
创建联合主键,联合主键 primary key 的非第一个位置不能 用 where
对非第一个位置使用 ALLOW FILTERING
为演示 CONTAINS , 向 上面的数据结构插入数据
对集合结构的条件 可以使用关键字 contains。
但是前提是要对集合结构建立索引 对于map更为特殊 create index on tableName(keys(mapName));
如果不对集合类型建立索引,会报错。
IN 必须是Partition KEY
关于SELECT的几个知识点:
1.可以使用COUNT计数函数,这是SQL中唯一一个可以用的函数
2.可以使用LIMIT关键字限制数量
3.在WHERE中出现的列名必须是PRIMARY KEY中指定的第一个列名,
或者PRIMARY KEY中其他位置使用CREATE INDEX建立了索引的列名;
如果不建立索引,也可以在结尾加上ALLOW FILTERING这个关键字
通常PRIMARY KEY中指定的第一个列名也叫做PARTITION KEY,
它对数据在节点上的分布起到了重要作用
4.WHERE 中对于类型为set\list的列可以使用CONTAINS关键字,
对于类型为map的列可以使用CONTAINS KEY关键字
对于PRIMARY KEY中的(最后 ???)第一个列 (???) 可以使用IN关键字
5.集合类型不能用为PRIMARY KEY,但是可以CREATE INDEX