Cassandra_教程二_利用 CQL 操作 Cassandra


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 ( PRIMARY KEY [,
                                [, ...]] )
               [WITH = [AND = [...]]];


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之间的数值,与数据的一致性有关。

示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第1张图片

操作:


查看表的信息

Cassandra_教程二_利用 CQL 操作 Cassandra_第2张图片




==========================================


修改 Column Family | TABLE  (列族) 的信息


ALTER TABLE  WITH Properties;

示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第3张图片




==========================================


增加 Column Family | TABLE (列族) 的列


ALTER ADD columnName columnType;


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第4张图片


============================================



删除 Column Family | TABLE (列族) 的列


命令: ALTER TABLE TableName DROP columnName;

示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第5张图片



=============================================


删除 Column Family | TABLE (列族)


DROP TABLE  tableName:


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第6张图片




================================================


清空 Column Family |  TABLE (列族)


命令: TRUNCATE TABLE tableName;

作用: 清空列族内的数据 / 相当于清空表里的数据


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第7张图片

=================================================






索引


创建索引


语法:
CREATE ( CUSTOM )? INDEX ( IF NOT EXISTS )? ( )?
         
                   ON '(' ')'
    
                   ( USING ( WITH OPTIONS = )? )?


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第8张图片

Cassandra_教程二_利用 CQL 操作 Cassandra_第9张图片


===========================================



删除索引


命令:

DROP INDEX INDEX_NAME;

示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第10张图片



=========================================








自定义数据类型


创建自定义数据类型


语法:

CREATE TYPE ( IF NOT EXISTS )?
                    '(' ( ',' )* ')'


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第11张图片

实际操作:

Cassandra_教程二_利用 CQL 操作 Cassandra_第12张图片




============================================


修改自定义数据类型:


ALTER TYPE(修改数据类型)


语法:

ALTER TYPE


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第13张图片

操作:

Cassandra_教程二_利用 CQL 操作 Cassandra_第14张图片




=========================================



删除自定义数据类型


语法:

DROP TYPE ( IF EXISTS )?


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第15张图片



============================================





触发器

触发器的具体操作需要编写Java代码实现


创建触发器


语法:

CREATE TRIGGER ( IF NOT EXISTS )? ( )?
 
                           ON
 
                          USING


示例:



====================================



删除触发器


语法:
DROP TRIGGER ( IF EXISTS )? ( )?


                            ON


示例:


==========================================





CQL DML ( CQL 数据操作语法)


插入数据

语法:
INSERT INTO


                      '(' ( ',' )* ')'


                      VALUES '(' ( ',' )* ')'


                      ( IF NOT EXISTS )?


                      ( USING


示例:


TTL 指的是 数据存活的时间

Cassandra_教程二_利用 CQL 操作 Cassandra_第16张图片


Cassandra_教程二_利用 CQL 操作 Cassandra_第17张图片



======================================================


修改数据

UPDATE(改)


语法:
UPDATE


                  ( USING


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第18张图片


Cassandra_教程二_利用 CQL 操作 Cassandra_第19张图片


===================================================



删除数据


DELETE(删)


语法:
DELETE ( ( ',' )* )?


                  FROM


                  ( USING TIMESTAMP )?


                  WHERE


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第20张图片

delete

1.删除指定的列

2.删除指定的行

Cassandra_教程二_利用 CQL 操作 Cassandra_第21张图片



==============================================



批量操作


BATCH(批量操作)


语法:

BEGIN ( UNLOGGED | COUNTER ) BATCH


                 ( USING


示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第22张图片


====================================================




CQL 查询语句

SELECT



语法:
SELECT


                  FROM


                  ( WHERE )?


                  ( ORDER BY )?


                  ( LIMIT )?


                  ( ALLOW FILTERING )?



示例:

Cassandra_教程二_利用 CQL 操作 Cassandra_第23张图片


下面进行操作的表的一些基本信息, 表的结构以及数据


Cassandra_教程二_利用 CQL 操作 Cassandra_第24张图片


Cassandra_教程二_利用 CQL 操作 Cassandra_第25张图片


知识点:

在WHERE中出现的列名必须是PRIMARY KEY中指定的第一个列名,

或者PRIMARY KEY中其他位置使用CREATE INDEX建立了索引的列名;

如果不建立索引,也可以在结尾加上ALLOW FILTERING这个关键字 (前提是这个字段是PRIMARY KEY)

通常PRIMARY KEY中指定的第一个列名也叫做PARTITION KEY,

它对数据在节点上的分布起到了重要作用


示例:

不是PRIMARY KEY 第一个列名 也没有 索引报错。。。

Cassandra_教程二_利用 CQL 操作 Cassandra_第26张图片


创建索引后再进行查询后, 可以查到数据

Cassandra_教程二_利用 CQL 操作 Cassandra_第27张图片


使用COUNT(*) 函数进行统计

Cassandra_教程二_利用 CQL 操作 Cassandra_第28张图片


集合类型不能用为PRIMARY KEY,但是可以CREATE INDEX

Cassandra_教程二_利用 CQL 操作 Cassandra_第29张图片



==================================================


创建联合主键,联合主键 primary key 的非第一个位置不能 用 where



Cassandra_教程二_利用 CQL 操作 Cassandra_第30张图片


对非第一个位置使用 ALLOW FILTERING



为演示 CONTAINS , 向 上面的数据结构插入数据

Cassandra_教程二_利用 CQL 操作 Cassandra_第31张图片


对集合结构的条件 可以使用关键字 contains。

但是前提是要对集合结构建立索引  对于map更为特殊 create index on tableName(keys(mapName));

如果不对集合类型建立索引,会报错。

Cassandra_教程二_利用 CQL 操作 Cassandra_第32张图片


IN 必须是Partition KEY

Cassandra_教程二_利用 CQL 操作 Cassandra_第33张图片



关于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



你可能感兴趣的:(NoSQL_Cassandra)