CQL语句
CQL中默认忽略大小写,若需要大小写敏感,可使用双引号将对象包起来,引用的时候也要用双引号包住
tips: 使用CQL需要预装Python环境
Ⅰ、基本知识点
1.1 数据类型
这边和关系型数据库相近的就不列出来了,只列出Cassandra特色的,重要的
| CQL类型 | 常用类型 | 说明 |
|---|---|---|
| list(T) | n/a | 有序集合,T可以是任意分集合CQL数据类型,例如,int,text等 |
| map(K,V) | n/a | 哈希表,K和V可以是任意非集合CQL数据类型,例如,int,text等 |
| set(T) | n/a | 无序集合,T可以是任意分集合CQL数据类型,例如,int,text等 |
1.2 命名规则
字母或数字开头,满足正则表达式[a-zA-Z0-9_]*
1.3 注释
- 单行注释://或者-
- 多行注释:/** xxx **/
1.4 关键字和保留字
定义column和keyspace时候不能使用关键字和保留字,一定要用可以使用双引号包起来,但不建议这么用
具体的关键字和保留字见官网表格
Ⅱ、数据定义语句
2.1 KeySpace
语法:create keyspace (if not exists)? <identifier> with <properties>;
注意:identifier长度需要小于等于32,默认大小写不敏感,可以使用双引号让它对大小写敏感
create keyspace test
with replication = {'class':'SimpleStrategy', 'replication_factor': 3}
and durable_writes = true;
查看当前所有KeySpace
desc keyspaces;
查看KeySpace的创建语句
desc <identifier>;
修改KeySpace
alter keyspace <identifier> with <properties>;
切换KeySpace
use <identifier>;
删除名为teset的KeySpace
drop keyspace (if exsits)? <identifier>;
create keyspace的两个属性
- replication
复制策略(SimpleStrategy(单一数据中心,测试用),NetworkTopologyStrategy(默认,强烈推荐,方便数据扩展),OldNetworkTopologyStrategy(官方已弃用))
这个属性是强制的,至少包括class属性,其他属性依class改变,replication决定了多节点的情况下,新写入的数据如何在节点之间复制保存
replication_factor属性,他是SimpleStrategy这种策略的一个属性,叫做副本因子,决定了每个row有多少个副本,这个值不可以超过节点数
- durable_writes
是否使用commit log持久化写入,默认为true
2.2 Column Family
语法:create (table|columnfamily) (if not exists)? <tablename>
'('<column-definition>(','<column-definiton>)*')'
(with<option>(and <option>)*)?;
一般把第一个column作为primary key,当作行的标识,也就是row key,也可以指定多个列组成复合键
create table timeline(
userid uuid,
posted_month int,
poster_time uuid,
body text,
poster_by text,
primary key(userid, posted_month, posted_time)
)with compaction = {'class':'LeveldCompactionStrategy'};
查看column family的创建语句
desc <tablename>;
修改column family
alter (table|columnfamily)<tablename><instruction>;
alter table table_name
add columnname varchar;
alter table table_name
drop columnname;
alter table table_name
with comment = 'xxx'
and read_repair_chance = 0.2;
alter table table_name
rename old_column_name to new_column_name;
下面这种修改column数据类型的语法新版本已不再支持
alter table table_name
alter column_name type uuid;
删除column family
drop table (if exists)? <tablename>;
清空column family
truncate <tablename>;
column family的属性
接在with后面,了解即可
| 属性 | 说明 |
|---|---|
| commnet | 对column family的描述信息 |
| bloom_filter_fp_chance | 指定bloom_filter算法的容错率,一般设置为0.01或者0.1 |
| caching | 设置缓存方案 |
| compactioin | 数据压缩策略 |
| compression | 数据压缩算法 |
| default_time_to_live | 存活时间,单位是秒,默认0(永久存活) |
| memtable_flush_period_in_ms | 内存数据刷新时间间隔 |
| read_repair_chance | 0-1之间的数值,与数据一致性有关 |
注意
- create table也可以写成create columnfamily,但建议使用前者
- 可使用if not exists规避错误
- 名字和keyspace一样不能超过32个字符
- 可使用create table keyspace.tablename在指定keyspace中创建,不指定则代表在当前keyspace创建
2.3 create index
语法:create (custom)? index (if not exists)? (<indexname>)?
on <tablename> '('<index-identifier>')'
(using<string>(with options=<map-literal>)?)?;
create index idx_name on columnfamily_name(column_name);
create index on columnfamily_name(column_name); 给一个默认idx_name
create index on columnfamily_name(keys(column_name)); 针对map类型column的键值进行索引
create custom index on columnfamily_name(column_name) using 'path.to.the.IndexClass';
create custom index on columnfamily_name(column_name) using 'path.to.the.IndexClass' with options = {'storage':'/mnt/ssd/indexes'};
删除index
drop index(if exsists)?(<keyspace>'.')?<identifier>;
2.4 create type
语法:create type (if not exists)? <typename>
'('<field-definition>(',' <field-definiton>)*')';
修改type
alter type <typename> <instruction>;
alter type type_name alter zip type varint;
alter type type_name add xxx text;
alter type type_name rename old_name to new_name and old2_name to new2_name;
查看当前所有自定义type
desc types;
查看指定type信息
desc type type_name;
删除type
drop type (if exsists)? <typename>;
注意:如果type还在使用,drop会报错
Ⅲ、数据操作语句
3.1 增删改
INSERT
insert into <tablename>
'('<identifier>(',' <identifier>)*')'
values '('<term-or-literal>(',' <term-or-literal>)*')'
(if not exists)?
(using <option> (AND <option>)*)?
using ttl 86400 表示这行数据过了86400秒自动删除
cassandra中没有duplicate,插入数据的主键已经存在,则会将老数据直接覆盖
UPDATE
update <tablename>
(using <option> (AND <option>*))?
set <assignment> (',' <assignment>)*
where <where-clause>
(if <condition> (AND condition)*)?
update的using语句是放在set之前,不在最后,这点要和insert区别
DELETE
delete (<selection> (',' <selection>)*)?
from <tablename>
(using timestamp <integer>)?
where <where-clause>
(if (exists|(<condition> (AND <condition>)*)))?
delete from column_family_name where column_name = xxx;
delete column_name from column_family_name where column_name = xxx;
BATCH 批量操作,要么全部成功,要么全部失败
begin (unlogged|counter) batch
(using <option> (and <options>)*)?
<modification_statement> (';' <modification_statement>)*
apply batch
3.2 查询
语法:
select <select-clause>
from <tablename>
(where <where-clause>)?
(order by <order-by>)?
(limit <integer>)?
(allow filtering)?
select column_name from column_family_name where column_name in (xxx,xxx,xxx);
select column_name as xxx from column_family_name;
select column_name from column_family_name where column_name = 'xxx' and column_name > 'xxx';
select count(*) from column_family_name;
select count(*) as xxx from column_family_name;
select注意点
- 可以使用count计算函数,目前唯一一个函数
- 可以使用limit关键字限制返回行数
- where中出现的column必须是primary key中的第一个列,或者是建立了索引的column,若两者都不满足,则须在结尾加上allow filtering关键字
- 通常primary key中指定的第一个column叫parition key,它对数据在节点上的分布起关键作用
- where中对于类型为set/list的column可以使用contains关键字,对于类型为map的column可以使用contains key关键字,对于partition key可以用in关键字
- 集合类型不能用作primary key,但是可以create index
CQL语句的更多相关文章
- neo4j 的cql 语句,增、删、改、查(条件查询)(持续更新)
前言 因为做一个比赛的项目 ,需要用到 neo4j 数据库,所以要学习其语言cql,特来整理一下他的基本语言. 整片的语句是按照 了 Neo4j 数据库自带的示例 Movie Graph 来写的. 直 ...
- CQL和SQL的CRUD操作比较
数据进行CRUD操作时,CQL语句和SQL语句的异同之处. 1.建表 2.CRUD语句比较 3.总结 1.建表 在此之前先分别创建两张表,插入数据,用来测试然后进行比较 在SQL数据库里面创建表 在C ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- Apache Spark技术实战之7 -- CassandraRDD高并发数据读取实现剖析
未经本人同意,严禁转载,徽沪一郎. 概要 本文就 spark-cassandra-connector 的一些实现细节进行探讨,主要集中于如何快速将大量的数据从cassandra 中读取到本地内存或磁盘 ...
- Cassandra的登录认证授权
cassandra的登录验证机制是独自的,数据是集群共享的 参考:http://blog.csdn.net/y_y_y_k_k_k_k/article/category/5943357 1.初始安装启 ...
- 学习Cassandra资料的一些整理
Cassandra note: 依赖:需要java 8 (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 数据模 ...
- cassandra 数据到Java对象的映射绑定
类似Hibernate和MyBatis的关系映射,自动帮你将查询数据或是修改的参数进行数据映射和绑定. 支持查询后返回数据ResultSet到Java对象的映射,支持修改.删除.查询之前参数的绑定. ...
- 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结
Geoserver篇 注意: 1)用法 GeoServer-Extension的使用方法:将jar包直接放入部署在tomcat上的geoserver/WEB-INF/lib文件夹中 2)在安装插件时, ...
- StreamCQL编写jstorm拓扑任务入门
一,什么是 StreamCQL StreamCQL(Stream Continuous Query Language)是一个类似SQL的声明式语言, 目的是在流计算平台(目前也就是jstrom)的基础 ...
随机推荐
- 51nod--1069 Nim 游戏(博弈论)
题目: 有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N及每堆石子的数量 ...
- C++入门篇三
引用:& &放在左边就是引用,放在右边就是取地址 int main() { //引用的类型必须相同,一经引用,不可以在被引用 ; int &b = a;//b引用a之后,两个同 ...
- Java_变量类型
目录 主要是为了复习java相关知识,本文主要内容来自于 http://www.runoob.com/java 一.局部变量 局部变量声明在方法.构造方法或语句块中 在方法.构造方法.语句块被执行的时 ...
- 【python】多进程共享变量Manager
Manager的复杂结构赋值问题 Manager的字典类型: 如果value是简单类型,比如int,可以直接赋值给共享变量,并可以后续直接修改 如果value是复杂类型 ,比如list,dict,则必 ...
- Dapper官方库 在guid和string互转的问题
之前在和老何谈论他的开源项目Util中使用MySql的过程中发现了官方dapper在转换guid到string时候的一个错误 Error parsing column 0 (ID=6c2adb93-d ...
- Java _类 相关知识
成员变量 java对象的属性就是成员变量,其实成员变量就是指普通的变量,可以设置初始值,也可以不设置.当不设置时,会被设置为默认值.(当成员变量前面有private关键词时,说明定义了一个私有成员) ...
- elk安装时最常见的报错
1.在启动kibana的时候报一下错误 max file descriptors [4096] for elasticsearch process likely too low, increase t ...
- KaliLinuxNetHunter教程实施刷机解锁Bootloader
KaliLinuxNetHunter教程实施刷机解锁Bootloader 当用户将前面的工作都准备完成后,即可开始刷机.其中,整个刷机过程分为三个步骤,分别是解锁Bootloader.刷入第三方Rec ...
- 在iphone的safari浏览器中,拨打电话,出现系统异常弹框
这是系统级别的问题,暂时无法解决. IPHONE的safari浏览器电话拨打,前两次点击拨打按钮,会正常弹出系统弹框包含(电话号码,取消,呼叫). 第3次往后,点击按钮会出现另一种系统弹框包含(已阻止 ...
- CodeForces - 1013B And 与运算暴力
题目链接: https://vjudge.net/problem/1735275/origin 基本思路: 本题思路比较简单,首先,我们知道 a & x = b, b & x = b; ...