CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and...

12
CQL – CASSANDRA QUERY LANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

Transcript of CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and...

Page 1: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

CQL – CASSANDRA QUERY LANGUAGE

Courtney Robinson – crlog.info@ Eric Evans (Python tests and CQL Spec)

Page 2: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

THRIFT OR AVRO?

External dependency Community activity dissipates Too generic Many user reported problems caused by

Thrift or the misuse thereof...

Its thrift! Its Avro!Its CQL....

Page 3: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

WHAT IS IT?

Effectively a structured query language

Replacement for clients? Not really...

Attempting to push as much server-side as possible

Familiar syntax

User friendly API for Cassandra new comers

Page 4: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

CQL V1.0.0 - KEYWORDS

USE SELECT UPDATE DELETE TRUNCATE DROP BATCH

CREATE KEYSPACE CREATE COLUMNFAMILY CREATE INDEX

SPECIAL STATEMENTS

That’s right!No INSERT...?

Page 5: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

SPECIFYING CONSISTENCY

... USING <CONSISTENCY> ...

Made up of the keyword USING, followed by a consistency level identifier.

Valid consistency levels are:

CONSISTENCY ZERO

CONSISTENCY ONE (default)

CONSISTENCY QUORUM

CONSISTENCY ALL

CONSISTENCY DCQUORUM

CONSISTENCY DCQUORUMSYNC

E.g BEGIN BATCH USING CONSISTENCY ONE

Page 6: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

CREATE KEYSPCE CREATE KEYSPACE WITH replication_factor = AND strategy_class = [AND

strategy_options. = [AND strategy_options. = ]];

E.g CREATE KEYSPACE TestKeyspace WITH strategy_options:DC1 = '1‘ AND strategy_class = 'NetworkTopologyStrategy‘

CREATE COLUMNFAMILY [(name1 type, name2 type, ...)] [WITH keyword1 = arg1 [AND keyword2 = arg2 [AND ...]]];

Set column type: CREATE COLUMNFAMILY (name1 type, name2 type) ...;

CREATE INDEX [index_name] ON <column_family> (column_name);

Used to create a new, automatic secondary index for the named column.

CREATE COLUMN FAMILY

CREATE INDEX

Page 7: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

USE USE <KEYSPACE>; Use keyword followed by a valid Keyspace name Set working Keyspace per-connection

DROP <KEYSPACE|COLUMNFAMILY>; DROP KEYSPACE KSName; DROP COLUMNFAMILY CFName;

Immediate, irreversible removal of keyspace and column family namespaces.

TRUNCATE <COLUMN FAMILY> Accepts a single argument (CF) name permanently removes all data from said column family.

DROP

TRUNCATE

Page 8: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

UPDATE [USING CONSISTENCY ] SET name1 = value1, name2 = value2 WHERE KEY = keyname;

UPDATE is used to write one or more columns to a record in a Cassandra column family.

No results are returned.

Creates or updates rows

UPDATE CFName SET ‘name' = 10 WHERE KEY = ‘1234’

UPDATE <COLUMN FAMILY> ...

Begin with the UPDATE keyword followed by CF name.

Followed by an optional consistency level specification.

UPDATE (values)

Page 9: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

BATCH UPDATES Where’s my batch mutate gone? Similar to code blocks/structs Has begining (Begin Batch) and end (Apply Batch)

BEGIN BATCH [USING ] UPDATE CF1 SET name1 = value1, name2 = value2 WHERE KEY = keyname1;

UPDATE CF1 SET name3 = value3 WHERE KEY = keyname2;

UPDATE CF2 SET name4 = value4, name5 = value5 WHERE KEY = keyname3;

APPLY BATCH

BEGIN BATCH USING CONSISTENCY QUORUMUPDATE CFname SET 1='1', 2='2', 3='3', 4='4' WHERE KEY='aa‘UPDATE CFname2 SET 5='5', 6='6', 7='8', 9='9' WHERE KEY='ab'UPDATE CFname SET 9='9', 8='8', 7='7', 6='6' WHERE KEY='ac'UPDATE CFname3 SET 5='5', 4='4', 3='3', 2='2' WHERE KEY='ad'UPDATE CFname SET 1='1', 2='2', 3='3', 4='4' WHERE KEY='ae'

APPLY BATCH

Page 10: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

DELETE

DELETE [COLUMNS] FROM [USING ] WHERE KEY = keyname1

DELETE [COLUMNS] FROM [USING ] WHERE KEY IN (keyname1, keyname2);

o Remove one or more columns from one or more rows.

o Optional comma-delimited list of column names following DELETE

o Removes entire row(s) if no columns are specified

o DELETE ‘col1', 'col2' FROM CF WHERE KEY = 'key‘o

DELETE ‘col1', 'col2' FROM CF WHERE KEY = ('key‘, ‘key2’, ‘key3’)

Page 11: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

SELECT SELECT [FIRST N] [REVERSED] <SELECT EXPR> FROM <COLUMN FAMILY>

[USING <CONSISTENCY>] [WHERE <CLAUSE>] [LIMIT N]; FIRST = number of columns, N REVERSED = Reverses sort order

Return a result set, key + columns per row

Specify columns: SELECT [FIRST N] [REVERSED] name1, name2, name3 FROM ...

Request a range of columns: SELECT [FIRST N] [REVERSED] name1..nameN FROM ...

“..” Notation specifies range Inclusive of start and end columns

E.g SELECT FIRST 2 REVERSED 3..1 FROM CF WHERE KEY = 'aa'

Page 12: CQL – C ASSANDRA Q UERY L ANGUAGE Courtney Robinson – crlog.info @ Eric Evans (Python tests and CQL Spec)

COURTNEY ROBINSON @ZCOURTS

Thank you for listening.

Questions?Links:

http://crlog.info/2011/03/29/cassandra-query-language-aka-cql-syntax/

https://svn.apache.org/viewvc/cassandra/trunk/doc/cql/CQL.html?view=co

https://issues.apache.org/jira/browse/CASSANDRA-1703