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 <ksname>
                WITH replication = {'class':'NetworkTopologyStrategy', 'DC1':1, 'DC2':2};


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


修改KEYSPACE 





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

查看 KEYSPACE的详细信息

示例:





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

删除 KEYSPACE

示例:








列族 COLUMN FAMILY | TABLE


创建列族


CREATE TABLE <cfname> ( <colname> <type> PRIMARY KEY [,
                                <colname> <type> [, ...]] )
               [WITH <optionname> = <val> [AND <optionname> = <val> [...]]];


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 <tableName>  WITH Properties;

示例:





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


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


ALTER <TableName> ADD columnName columnType;


示例:



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



删除 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 )? ( <indexname> )?
         
                   ON <tablename> '(' <index-identifier> ')'
    
                   ( USING <string> ( WITH OPTIONS = <map-literal> )? )?


示例:




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



删除索引


命令:

DROP INDEX INDEX_NAME;

示例:




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








自定义数据类型


创建自定义数据类型


语法:

CREATE TYPE ( IF NOT EXISTS )? <typename>
                    '(' <field-definition> ( ',' <field-definition> )* ')'


示例:


实际操作:




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


修改自定义数据类型:


ALTER TYPE(修改数据类型)


语法:

ALTER TYPE <typename> <instruction>


示例:


操作:





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



删除自定义数据类型


语法:

DROP TYPE ( IF EXISTS )? <typename>


示例:




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





触发器

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


创建触发器


语法:

CREATE TRIGGER ( IF NOT EXISTS )? ( <triggername> )?
 
                           ON <tablename>
 
                          USING <string>


示例:



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



删除触发器


语法:
DROP TRIGGER ( IF EXISTS )? ( <triggername> )?


                            ON <tablename>


示例:


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





CQL DML ( CQL 数据操作语法)


插入数据

语法:
INSERT INTO <tablename>


                      '(' <identifier> ( ',' <identifier> )* ')'


                      VALUES '(' <term-or-literal> ( ',' <term-or-literal> )* ')'


                      ( IF NOT EXISTS )?


                      ( USING <option> ( AND <option> )* )?


示例:


TTL 指的是 数据存活的时间






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


修改数据

UPDATE(改)


语法:
UPDATE <tablename>


                  ( USING <option> ( AND <option> )* )?


                  SET <assignment> ( ',' <assignment> )*


                  WHERE <where-clause>


                  ( IF <condition> ( AND condition )* )?


示例:





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



删除数据


DELETE(删)


语法:
DELETE ( <selection> ( ',' <selection> )* )?


                  FROM <tablename>


                  ( USING TIMESTAMP <integer>)?


                  WHERE <where-clause>


示例:


delete

1.删除指定的列

2.删除指定的行




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



批量操作


BATCH(批量操作)


语法:

BEGIN ( UNLOGGED | COUNTER ) BATCH


                 ( USING <option> ( AND <option> )* )?


                 <modification-stmt> ( ';' <modification-stmt> )*


 APPLY BATCH


示例:



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




CQL 查询语句

SELECT



语法:
SELECT <select-clause>


                  FROM <tablename>


                  ( WHERE <where-clause> )?


                  ( ORDER BY <order-by> )?


                  ( LIMIT <integer> )?


                  ( 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



  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值