Cassandra Query Language (CQL)v3.3.0
1.Cql语法
1.1.前言
本文档描述了CQL v3。CQL v3与CQL v2不兼容且在很多地方不同。
CQL v3提供了非常类似于SQL的数据模型,数据放在了包含rows和columns的tables中。因此,当使用此文档时,这些内容(tables,rows,columns)与SQL定义相同。但是rows和columns其内部实现的原理不同。
1.2.约定
为了介绍CQL语法,文档使用以下约定:
语言规则使用类BNF符号: ::= TERMINAL 非终结符号。
作为额外的BNF快捷符号,使用传统的正则表达式的符号(?+and*)表示是可选的,and/or可以重复。[]符号表示任意一个。
code块提供了简单codeSELECT sample_usage FROM cql;
1.3. 标识符和关键字
CQL语言使用标识符(或名称)来标识tables,columns和其他对象。一个标识符是一个令牌,与正则表达式一致[a-zA-Z][a-zA-Z0-9_]*。
一些标识符,比如SELECT或WITH,是关键字。他们有固定的意义且被保留的。
标识符和关键字是大小写不敏感的。因此SELECT与select,sElEcT相同。使用的常常约定关键字大写,标识符小写。
1.4.常量
CQL定义了下面类型的常量:strings,integers,floats,booleans,uuids和blobs:
1.5.注释
CQL使用注释:--或//
多行注释:/* */-- This is a comment
// This is a comment too
/* This is
a multi-line comment */
1.6.语句
SQL语句可以分为3类:DDL:改变和设置数据存储方式
DML:改变数据
Queries:查询数据
所有语句以分号(;)结束,除了单条语句外。支持的语句如下: ::= any quoted or unquoted identifier, excluding reserved keywords
::= ( '.')?
::= a string constant
::= an integer constant
::= a float constant
::= |
::= a uuid constant
::= a boolean constant
::= a blob constant
::= | | | |
::= '?' | ':'
::= | | | '(' ( (',' )*)? ')'
::=
|
|
::= '{' ( ':' ( ',' ':' )* )? '}'
::= '{' ( ( ',' )* )? '}'
::= '[' ( ( ',' )* )? ']'
::=
::= (AND )*
::= '=' ( | | )
上面语法在实际中并不是所有的都是合法的。最显著的是,和嵌套在中是不被允许的。
可以是匿名(一个问号?)也可以命名(在:之前的一个标识)。唯一区别就是命名更容易被引用。
用来创建或修改keyspaces和tables。每一个类型可以是simple或map。
用来标识一个table。表示一个表名。
1.7.Prepared Statement
CQL支持prepared statements。
支持LIMIT,TIMESTAMP和TTL从句
2.DDL
2.1.CREATE KEYSPACE
语法: ::= CREATE KEYSPACE (IF NOT EXISTS)? WITH
样例:CREATE KEYSPACE Excelsior
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
CREATE KEYSPACE Excalibur
WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3}
AND durable_writes = false
CREATE KEYSPACE语句用来创建一个新的顶级keyspace。Keyspace是一个命名空间,定义了复制策略和tables的其他选项集合。合法的keyspaces名称是由数字和字母组成的,长度小于32为的标识。注意,keyspace命名是大小写不敏感的。
CREATE KEYSPACE支持的:namekindmandatorydefaultdescription
replicationmapyes复制策略和使用keyspace选项
durable_writessimplenotrue是否使用commit log对于更新keyspace
replication 是必选的。Cassandra支持以下的‘class’‘SimpleStrategy’:一个简单策略,定义了简单的复制因子在整个集群集群中。只支持‘replication_factor’一个子选项,定义复制因子且是必选项。
l‘NetworkTopologyStrategy’:可以为每个数据中心定义单独的复制因子。子选项以key-value方式定义,key表示数据中心名称,value表示此数据中心的复制因子。‘OldNetworkTopologyStrategy’:遗留的复制策略。应该避免使用,而尽量使用‘NetworkTopologyStrategy’。
试图创建一个已经存在的keyspace将返回一个错误,除非使用IF NOT EXISTS选项。如果使用它,语句将是空操作如果keyspace已经存在。
2.2.USE
语法: ::= USE
样例:USE myApp
USE语句使用已经存在的keyspace名称作为参数,设置此keyspace作为每次连接的当前工作keyspace。
2.3.ALTER KEYSPACE
语法: ::= ALTER KEYSPACE WITH
样例:ALTER KEYSPACE Excelsior
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4};
ALTERKEYSPACE语句修改keyspace的属性。支持的与CREATE KEYSPACE相同。
2.4.DROP KEYSPACE
语法: ::= DROP KEYSPACE ( IF EXISTS )?
样例:DROP KEYSPACE myApp;
DROP KEYSPACE语句执行结果是,及时且不可逆的删除keyspace,包括keyspace中的所有column families