A deep look at the CQL WHERE clause
CQL WHERE clause
2© 2015. All Rights Reserved.
Driver
The WHERE clause restrictions are dependent on:
• The type of statement: SELECT, UPDATE or DELETE
• The type of column: partition key, clustering or regular column
• If a secondary index is used or not
3© 2015. All Rights Reserved.
Driver
SELECT statements
Partition key restrictions
4© 2015. All Rights Reserved.
Driver
Cluster Date Time Count
‘cluster 1’ ‘2015-09-21’ ‘12:00’ 251
‘cluster 1’ ‘2015-09-22’ ‘12:00’ 342
‘cluster 2’ ‘2015-09-21’ ‘12:00’ 403
‘cluster 2’ ‘2015-09-22’ ‘12:00’ 451
CREATE TABLE numberOfRequests (
cluster text,
date text,
time text,
count int,
PRIMARY KEY ((cluster, date))
)
Partition Key
Partition key restrictions
5© 2015. All Rights Reserved.
Driver
Cluster Date Murmur3 hash
‘cluster 1’ ‘2015-09-21’ -4782752162231423249
‘cluster 1’ ‘2015-09-22’ 4936127188075462704
‘cluster 2’ ‘2015-09-21’ 5822105674898716412
‘cluster 2’ ‘2015-09-22’ 2698159220916609751
A
C
D B
4611686018427387904
to
9223372036854775807
-9223372036854775808
to
-4611686018427387903
-1
to
4611686018427387903
-4611686018427387904
to
-1
Partition key restrictions
6© 2015. All Rights Reserved.
Driver
Cluster Date Node
‘cluster 1’ ‘2015-09-21’ A
‘cluster 1’ ‘2015-09-22’ D
‘cluster 2’ ‘2015-09-21’ D
‘cluster 2’ ‘2015-09-22’ C
A
C
D B
Partition key restrictions
7© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests;
Driver
Partition key restrictions
8© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’;
InvalidRequest: code=2200 [Invalid query]
message="Partition key parts: date must be restricted as other parts are"
Partition key restrictions
9© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’
AND date = ‘2015-09-21’;
Driver
Partition key restrictions
10© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’
AND date = ‘2015-09-21’;
Driver
…with TokenAwarePolicy
Partition key restrictions
11© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 2’
AND date IN (‘2015-09-21’, ‘2015-09-22’);
Driver
Partition key restrictions
12© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 2’
AND date = ‘2015-09-21’;
Driver
…with TokenAwarePolicy
and asynchronous calls
SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 2’
AND date = ‘2015-09-22’;
Partition key restrictions
13© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’
AND date >= ‘2015-09-21’;
InvalidRequest: code=2200 [Invalid query]
message="Only EQ and IN relation are supported on the partition key (unless
you use the token() function)"
Partition key restrictions
14© 2015. All Rights Reserved.
Driver
Cluster Date Node
‘cluster 1’ ‘2015-09-21’ A
‘cluster 1’ ‘2015-09-22’ D
‘cluster 2’ ‘2015-09-21’ D
‘cluster 2’ ‘2015-09-22’ C
A
C
D B
SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’
AND date >= ‘2015-09-21’;
Partition key restrictions
15© 2015. All Rights Reserved.
Driver
• Murmur3Partitioner (default): uniformly distributes data across
the cluster based on MurmurHash hash values.
• RandomPartitioner: uniformly distributes data across the
cluster based on MD5 hash values.
• ByteOrderedPartitioner: keeps an ordered distribution of data
lexically by key bytes
Partition key restrictions
16© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests
WHERE token(cluster, date) > token(‘cluster 1’, ‘2015-09-21’)
AND token(cluster, date) < token(‘cluster 1’, ‘2015-09-23’);
Partition key restrictions (SELECT)
17© 2015. All Rights Reserved.
• Without secondary index, either all partition key components must be
restricted or none of them
• = restrictions are allowed on any partition key component
• IN restrictions are allowed on any partition key component since 2.2
• Prior to 2.2, IN restrictions were only allowed on the last partition key
component
• =, >, >=, <= and < restrictions are allowed with the token function
Clustering column restrictions
18© 2015. All Rights Reserved.
CREATE TABLE numberOfRequests (
cluster text,
date text,
datacenter text,
server inet,
time text,
count int,
PRIMARY KEY((cluster, date), datacenter, server, time))
…
Clustering column restrictions
19© 2015. All Rights Reserved.
…
Datacenter Server Time Count
Iowa 196.8.7.134 00:00 130
Iowa 196.8.7.134 00:01 125
Iowa 196.8.7.134 00:02 97
Iowa 196.8.7.135 00:00 178
Iowa 196.8.7.135 00:01 201
[Iowa, 196.8.7.134, 00:02, count] :
97
In the Memtables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:01, count] :
201
[Iowa, 196.8.7.134, 00:00, count] :
130
Cell name
Cell
Column name
Clustering column restrictions
20© 2015. All Rights Reserved.
…
Datacenter Server Time Count
Iowa 196.8.7.134 00:00 130
Iowa 196.8.7.134 00:01 125
Iowa 196.8.7.134 00:02 97
Iowa 196.8.7.135 00:00 178
Iowa 196.8.7.135 00:01 201
[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
[Iowa, 196.8.7.134, 00:00, count] :
130
Cell name
Cell
Column name
Clustering column restrictions
21© 2015. All Rights Reserved.
…
[Iowa, 196.8.7.134, 00:02, count] :
97
In the Memtables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:01, count] :
201
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’
AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’ AND time = ‘00:00’;
[Iowa,196.8.7.135,00:00]
Clustering column restrictions
22© 2015. All Rights Reserved.
…
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’
AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’ AND time = ‘00:00’;
[Iowa,196.8.7.135,00:00]
…
[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
Clustering column restrictions
23© 2015. All Rights Reserved.
[Iowa, 196.8.7.134, 00:02, count] :
97
In the Memtables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:01, count] :
201
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’
AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’;
[Iowa,196.8.7.135]
Clustering column restrictions
24© 2015. All Rights Reserved.
…
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’
AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’;
[Iowa,196.8.7.135]
…[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
Clustering column restrictions
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’
AND time = ‘00:00’;
[?,?,00:00]
InvalidRequest: code=2200 [Invalid query]
message="PRIMARY KEY column "time" cannot be restricted as preceding
column "datacenter" is not restricted"
Clustering column restrictions
26© 2015. All Rights Reserved.
…
AND datacenter = ‘Iowa’
AND server IN (‘196.8.7.134’, ‘196.8.7.135’)
AND time = ‘00:00’;
In 2.2:
[Iowa,196.8.7.134,00:00]
[Iowa,196.8.7.135,00:00]
…[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
Clustering column restrictions
27© 2015. All Rights Reserved.
…
AND datacenter = ‘Iowa’
AND server IN (‘196.8.7.134’, ‘196.8.7.135’)
AND time = ‘00:00’;
In 2.1:
InvalidRequest: code=2200 [Invalid query]
message="Clustering column "server" cannot be restricted by an IN relation"
Clustering column restrictions
28© 2015. All Rights Reserved.
= multi-column restriction:
(clustering1, clustering2, clustering3) = (?, ?, ?)
IN multi-column restriction:
(clustering1, clustering2, clustering3) IN ((?, ?, ?), (?, ?, ?))
Slice multi-column restriction:
(clustering1, clustering2, clustering3) > (?, ?, ?)
(clustering1, clustering2, clustering3) >= (?, ?, ?)
(clustering1, clustering2, clustering3) <= (?, ?, ?)
(clustering1, clustering2, clustering3) < (?, ?, ?)
Clustering column restrictions
29© 2015. All Rights Reserved.
…
AND datacenter = ‘Iowa’
AND (server, time) IN ((‘196.8.7.134’, ‘00:00’),
(‘196.8.7.135’, ‘00:00’));
In 2.1:
[Iowa,196.8.7.134,00:00]
[Iowa,196.8.7.135,00:00]
…[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
Clustering column restrictions
30© 2015. All Rights Reserved.
…
AND datacenter = ‘Iowa’
AND server = ‘196.8.7.134’
AND time > ’00:00’;
from after [Iowa,196.8.7.134,00:00]
to end of [Iowa,196.8.7.134]
…[Iowa, 196.8.7.134, 00:02, count] :
97
In the SSTables:
[Iowa, 196.8.7.134, 00:00, count] :
130
[Iowa, 196.8.7.134, 00:01, count] :
125
[Iowa, 196.8.7.135, 00:00, count] :
178
[Iowa, 196.8.7.135, 00:0
201
Clustering column restrictions (SELECT)
31© 2015. All Rights Reserved.
• Without secondary index, a clustering column cannot be restricted if
one of the previous ones was not
• = restrictions (single and multi) are allowed on any clustering column
• IN restrictions (single and multi) are allowed on any clustering column
since 2.2
• Prior to 2.2, IN restrictions (single and multi) were only allowed on the
last clustering column or set of clustering columns
• >, >=, <=, < restrictions (single and multi) are only allowed on the last
restricted clustering column or set of clustering columns
• CONTAINS and CONTAINS KEY restrictions are only allowed on
indexed collections
Secondary index queries
32© 2015. All Rights Reserved.
CREATE TABLE numberOfRequests (
cluster text,
date text,
datacenter text,
server inet,
time text,
count int,
PRIMARY KEY((cluster, date), datacenter, server, time));
CREATE INDEX ON numberOfRequests (time);
…
Secondary index queries
33© 2015. All Rights Reserved.
CREATE INDEX ON numberOfRequests (time);
CREATE LOCAL TABLE numberOfRequests_time_idx (
time text,
cluster text,
date text,
datacenter text,
server inet,
PRIMARY KEY(time, cluster, date, datacenter, server);
…
Table Partition Key
Table remaining clustering columns
IDX-BIDX-D
IDX-C
IDX-A
Secondary index queries
34© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests WHERE time = ‘12:00’;
Driver
Secondary index queries
35© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests WHERE time = ‘12:00’;
idx
SELECT * FROM numberOfRequests_time_idx
WHERE time = ‘12:00’;
Results (Primary Keys)
table
SELECT with full PK;
[For each]
Add to rows
Secondary index queries
36© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests WHERE time >= ‘12:00’;
InvalidRequest: code=2200 [Invalid query]
message="PRIMARY KEY column "time" cannot be restricted as preceding
column "datacenter" is not restricted"
Direct queries on secondary index support only =, CONTAINS or CONTAINS
KEY restrictions.
Secondary index queries
37© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests WHERE time = ‘12:00’
AND count >= 500 ALLOW FILTERING;
idx
SELECT * FROM numberOfRequests_time_idx
WHERE time = ‘12:00’;
Results (Primary Keys)
table
SELECT with full PK;
[For each]
Add to rows
[if count >= 500]
IDX-BIDX-D
IDX-C
IDX-A
Secondary index queries
38© 2015. All Rights Reserved.
Driver
A
C
D B
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster 1’ AND date = ‘2015-09-21’AND time = ‘12:00’;
Driver
Secondary index queries
39© 2015. All Rights Reserved.
Driver
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster 1’ AND date = ‘2015-09-21’ AND time = ‘12:00’;
idx
SELECT * FROM numberOfRequests_time_idx
WHERE time = ‘12:00’ AND cluster = ‘1’ AND
date = ‘2015-09-21’;
Results (Primary Keys)
table
SELECT with full PK
[For each]
Add to rows
40© 2015. All Rights Reserved.
Driver
UPDATE/DELETE statements
UPDATE statements
41© 2015. All Rights Reserved.
Driver
In the UPDATE statements all the primary key columns must be restricted and
the only allowed restrictions are:
• Prior to 3.0:
• Single column = restriction on any partition key or clustering column
• Single column IN restriction on the last partition key column
• In 3.0:
• = and IN single column restrictions on any partition key column
• = and IN single or multi column restrictions on any clustering column
DELETE statements
42© 2015. All Rights Reserved.
Driver
Before 3.0, in the DELETE statements all the primary key columns must be
restricted and the only allowed restrictions were:
• Single column = restriction on any partition key or clustering column
• Single column IN restriction on the last partition key column
DELETE statements
43© 2015. All Rights Reserved.
Driver
Since 3.0:
• The partition key columns must be restricted by = or IN restrictions
• A clustering column might not be restricted if none of the following is
• Clustering columns can be restricted by:
• Single or multi column = restriction
• Single or multi column IN restriction
• Single or multi column >, >=, <=, < restriction
© 2015. All Rights Reserved. 44
Design your tables for the queries
you want to perform.
Thank you

More Related Content

PDF
qmx_acknowledgement_dl_sql_ex.sql
PDF
SQLチューニング総合診療Oracle CloudWorld出張所
PDF
db tech showcase Tokyo 2014 - L36 - JPOUG : SQLチューニング総合診療所 ケースファイルX
PDF
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
PDF
Oracle Diagnostics : Explain Plans (Simple)
PDF
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
PPT
11 Things About11g
PPTX
Using SQL to process hierarchies
qmx_acknowledgement_dl_sql_ex.sql
SQLチューニング総合診療Oracle CloudWorld出張所
db tech showcase Tokyo 2014 - L36 - JPOUG : SQLチューニング総合診療所 ケースファイルX
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
Oracle Diagnostics : Explain Plans (Simple)
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
11 Things About11g
Using SQL to process hierarchies

Viewers also liked (17)

PDF
DataStax: A deep look at the CQL WHERE clause
PDF
Dealing with JVM limitations in Apache Cassandra (Fosdem 2012)
PDF
Counters At Scale - A Cautionary Tale
PPTX
Manage your compactions before they manage you!
PDF
Story behind PF 2016
PDF
Cassandra from tarball to production
PDF
Cassandra SF 2015 - Repeatable, Scalable, Reliable, Observable Cassandra
PDF
Hardening cassandra for compliance or paranoia
PDF
Devoxx France: Fault tolerant microservices on the JVM with Cassandra
PDF
Case Study: Troubleshooting Cassandra performance issues as a developer
PDF
Why does my choice of storage matter with cassandra?
PDF
Tombstones and Compaction
PDF
C language in our world 2016
PPTX
Cassandra Summit 2015: Real World DTCS For Operators
PDF
Indexing in Cassandra
PDF
Development of Mobile Applications
PDF
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
DataStax: A deep look at the CQL WHERE clause
Dealing with JVM limitations in Apache Cassandra (Fosdem 2012)
Counters At Scale - A Cautionary Tale
Manage your compactions before they manage you!
Story behind PF 2016
Cassandra from tarball to production
Cassandra SF 2015 - Repeatable, Scalable, Reliable, Observable Cassandra
Hardening cassandra for compliance or paranoia
Devoxx France: Fault tolerant microservices on the JVM with Cassandra
Case Study: Troubleshooting Cassandra performance issues as a developer
Why does my choice of storage matter with cassandra?
Tombstones and Compaction
C language in our world 2016
Cassandra Summit 2015: Real World DTCS For Operators
Indexing in Cassandra
Development of Mobile Applications
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
Ad

Similar to A deep look at the cql where clause (20)

PDF
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
PPTX
Everything you always wanted to know about datetime types but didn’t have tim...
PDF
Macy's: Changing Engines in Mid-Flight
PPTX
Execution plans for mere mortals
KEY
Perf Tuning Short
PDF
INFLUXQL & TICKSCRIPT
PDF
Hash join use memory optimization
PPTX
Php forum2015 tomas_final
PPTX
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
PDF
201809 DB tech showcase
PPT
Rmoug ashmaster
PPTX
PPTX
MySQL 8 -- A new beginning : Sunshine PHP/PHP UK (updated)
PPTX
Partitioning 101
PPT
Jboss World 2011 Infinispan
PDF
Performance schema and sys schema
PDF
Connor McDonald Partitioning
PPT
Metadata Matters
PPT
Informix Warehouse Accelerator (IWA) features in version 12.1
PPTX
5 Cool Things About SQL
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
Everything you always wanted to know about datetime types but didn’t have tim...
Macy's: Changing Engines in Mid-Flight
Execution plans for mere mortals
Perf Tuning Short
INFLUXQL & TICKSCRIPT
Hash join use memory optimization
Php forum2015 tomas_final
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
201809 DB tech showcase
Rmoug ashmaster
MySQL 8 -- A new beginning : Sunshine PHP/PHP UK (updated)
Partitioning 101
Jboss World 2011 Infinispan
Performance schema and sys schema
Connor McDonald Partitioning
Metadata Matters
Informix Warehouse Accelerator (IWA) features in version 12.1
5 Cool Things About SQL
Ad

Recently uploaded (20)

PDF
The influence of sentiment analysis in enhancing early warning system model f...
PDF
Five Habits of High-Impact Board Members
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PPTX
Microsoft Excel 365/2024 Beginner's training
PPTX
Build Your First AI Agent with UiPath.pptx
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PPTX
2018-HIPAA-Renewal-Training for executives
PDF
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
CloudStack 4.21: First Look Webinar slides
PDF
Architecture types and enterprise applications.pdf
PDF
Developing a website for English-speaking practice to English as a foreign la...
PPT
What is a Computer? Input Devices /output devices
PDF
A review of recent deep learning applications in wood surface defect identifi...
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PPT
Geologic Time for studying geology for geologist
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
The influence of sentiment analysis in enhancing early warning system model f...
Five Habits of High-Impact Board Members
NewMind AI Weekly Chronicles – August ’25 Week III
Microsoft Excel 365/2024 Beginner's training
Build Your First AI Agent with UiPath.pptx
Custom Battery Pack Design Considerations for Performance and Safety
2018-HIPAA-Renewal-Training for executives
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
Zenith AI: Advanced Artificial Intelligence
CloudStack 4.21: First Look Webinar slides
Architecture types and enterprise applications.pdf
Developing a website for English-speaking practice to English as a foreign la...
What is a Computer? Input Devices /output devices
A review of recent deep learning applications in wood surface defect identifi...
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
Geologic Time for studying geology for geologist
A proposed approach for plagiarism detection in Myanmar Unicode text
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
Final SEM Unit 1 for mit wpu at pune .pptx
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx

A deep look at the cql where clause

  • 1. A deep look at the CQL WHERE clause
  • 2. CQL WHERE clause 2© 2015. All Rights Reserved. Driver The WHERE clause restrictions are dependent on: • The type of statement: SELECT, UPDATE or DELETE • The type of column: partition key, clustering or regular column • If a secondary index is used or not
  • 3. 3© 2015. All Rights Reserved. Driver SELECT statements
  • 4. Partition key restrictions 4© 2015. All Rights Reserved. Driver Cluster Date Time Count ‘cluster 1’ ‘2015-09-21’ ‘12:00’ 251 ‘cluster 1’ ‘2015-09-22’ ‘12:00’ 342 ‘cluster 2’ ‘2015-09-21’ ‘12:00’ 403 ‘cluster 2’ ‘2015-09-22’ ‘12:00’ 451 CREATE TABLE numberOfRequests ( cluster text, date text, time text, count int, PRIMARY KEY ((cluster, date)) ) Partition Key
  • 5. Partition key restrictions 5© 2015. All Rights Reserved. Driver Cluster Date Murmur3 hash ‘cluster 1’ ‘2015-09-21’ -4782752162231423249 ‘cluster 1’ ‘2015-09-22’ 4936127188075462704 ‘cluster 2’ ‘2015-09-21’ 5822105674898716412 ‘cluster 2’ ‘2015-09-22’ 2698159220916609751 A C D B 4611686018427387904 to 9223372036854775807 -9223372036854775808 to -4611686018427387903 -1 to 4611686018427387903 -4611686018427387904 to -1
  • 6. Partition key restrictions 6© 2015. All Rights Reserved. Driver Cluster Date Node ‘cluster 1’ ‘2015-09-21’ A ‘cluster 1’ ‘2015-09-22’ D ‘cluster 2’ ‘2015-09-21’ D ‘cluster 2’ ‘2015-09-22’ C A C D B
  • 7. Partition key restrictions 7© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests; Driver
  • 8. Partition key restrictions 8© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’; InvalidRequest: code=2200 [Invalid query] message="Partition key parts: date must be restricted as other parts are"
  • 9. Partition key restrictions 9© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’ AND date = ‘2015-09-21’; Driver
  • 10. Partition key restrictions 10© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’ AND date = ‘2015-09-21’; Driver …with TokenAwarePolicy
  • 11. Partition key restrictions 11© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 2’ AND date IN (‘2015-09-21’, ‘2015-09-22’); Driver
  • 12. Partition key restrictions 12© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 2’ AND date = ‘2015-09-21’; Driver …with TokenAwarePolicy and asynchronous calls SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 2’ AND date = ‘2015-09-22’;
  • 13. Partition key restrictions 13© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’ AND date >= ‘2015-09-21’; InvalidRequest: code=2200 [Invalid query] message="Only EQ and IN relation are supported on the partition key (unless you use the token() function)"
  • 14. Partition key restrictions 14© 2015. All Rights Reserved. Driver Cluster Date Node ‘cluster 1’ ‘2015-09-21’ A ‘cluster 1’ ‘2015-09-22’ D ‘cluster 2’ ‘2015-09-21’ D ‘cluster 2’ ‘2015-09-22’ C A C D B SELECT * FROM numberOfRequests WHERE cluster= ‘cluster 1’ AND date >= ‘2015-09-21’;
  • 15. Partition key restrictions 15© 2015. All Rights Reserved. Driver • Murmur3Partitioner (default): uniformly distributes data across the cluster based on MurmurHash hash values. • RandomPartitioner: uniformly distributes data across the cluster based on MD5 hash values. • ByteOrderedPartitioner: keeps an ordered distribution of data lexically by key bytes
  • 16. Partition key restrictions 16© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE token(cluster, date) > token(‘cluster 1’, ‘2015-09-21’) AND token(cluster, date) < token(‘cluster 1’, ‘2015-09-23’);
  • 17. Partition key restrictions (SELECT) 17© 2015. All Rights Reserved. • Without secondary index, either all partition key components must be restricted or none of them • = restrictions are allowed on any partition key component • IN restrictions are allowed on any partition key component since 2.2 • Prior to 2.2, IN restrictions were only allowed on the last partition key component • =, >, >=, <= and < restrictions are allowed with the token function
  • 18. Clustering column restrictions 18© 2015. All Rights Reserved. CREATE TABLE numberOfRequests ( cluster text, date text, datacenter text, server inet, time text, count int, PRIMARY KEY((cluster, date), datacenter, server, time)) …
  • 19. Clustering column restrictions 19© 2015. All Rights Reserved. … Datacenter Server Time Count Iowa 196.8.7.134 00:00 130 Iowa 196.8.7.134 00:01 125 Iowa 196.8.7.134 00:02 97 Iowa 196.8.7.135 00:00 178 Iowa 196.8.7.135 00:01 201 [Iowa, 196.8.7.134, 00:02, count] : 97 In the Memtables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:01, count] : 201 [Iowa, 196.8.7.134, 00:00, count] : 130 Cell name Cell Column name
  • 20. Clustering column restrictions 20© 2015. All Rights Reserved. … Datacenter Server Time Count Iowa 196.8.7.134 00:00 130 Iowa 196.8.7.134 00:01 125 Iowa 196.8.7.134 00:02 97 Iowa 196.8.7.135 00:00 178 Iowa 196.8.7.135 00:01 201 [Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201 [Iowa, 196.8.7.134, 00:00, count] : 130 Cell name Cell Column name
  • 21. Clustering column restrictions 21© 2015. All Rights Reserved. … [Iowa, 196.8.7.134, 00:02, count] : 97 In the Memtables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:01, count] : 201 SELECT * FROM numberOfRequests WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’ AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’ AND time = ‘00:00’; [Iowa,196.8.7.135,00:00]
  • 22. Clustering column restrictions 22© 2015. All Rights Reserved. … SELECT * FROM numberOfRequests WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’ AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’ AND time = ‘00:00’; [Iowa,196.8.7.135,00:00] … [Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201
  • 23. Clustering column restrictions 23© 2015. All Rights Reserved. [Iowa, 196.8.7.134, 00:02, count] : 97 In the Memtables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:01, count] : 201 SELECT * FROM numberOfRequests WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’ AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’; [Iowa,196.8.7.135]
  • 24. Clustering column restrictions 24© 2015. All Rights Reserved. … SELECT * FROM numberOfRequests WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’ AND datacenter = ‘Iowa’ AND server = ‘196.8.7.135’; [Iowa,196.8.7.135] …[Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201
  • 25. Clustering column restrictions SELECT * FROM numberOfRequests WHERE cluster = ‘cluster1’ AND date =‘2015-09-21’ AND time = ‘00:00’; [?,?,00:00] InvalidRequest: code=2200 [Invalid query] message="PRIMARY KEY column "time" cannot be restricted as preceding column "datacenter" is not restricted"
  • 26. Clustering column restrictions 26© 2015. All Rights Reserved. … AND datacenter = ‘Iowa’ AND server IN (‘196.8.7.134’, ‘196.8.7.135’) AND time = ‘00:00’; In 2.2: [Iowa,196.8.7.134,00:00] [Iowa,196.8.7.135,00:00] …[Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201
  • 27. Clustering column restrictions 27© 2015. All Rights Reserved. … AND datacenter = ‘Iowa’ AND server IN (‘196.8.7.134’, ‘196.8.7.135’) AND time = ‘00:00’; In 2.1: InvalidRequest: code=2200 [Invalid query] message="Clustering column "server" cannot be restricted by an IN relation"
  • 28. Clustering column restrictions 28© 2015. All Rights Reserved. = multi-column restriction: (clustering1, clustering2, clustering3) = (?, ?, ?) IN multi-column restriction: (clustering1, clustering2, clustering3) IN ((?, ?, ?), (?, ?, ?)) Slice multi-column restriction: (clustering1, clustering2, clustering3) > (?, ?, ?) (clustering1, clustering2, clustering3) >= (?, ?, ?) (clustering1, clustering2, clustering3) <= (?, ?, ?) (clustering1, clustering2, clustering3) < (?, ?, ?)
  • 29. Clustering column restrictions 29© 2015. All Rights Reserved. … AND datacenter = ‘Iowa’ AND (server, time) IN ((‘196.8.7.134’, ‘00:00’), (‘196.8.7.135’, ‘00:00’)); In 2.1: [Iowa,196.8.7.134,00:00] [Iowa,196.8.7.135,00:00] …[Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201
  • 30. Clustering column restrictions 30© 2015. All Rights Reserved. … AND datacenter = ‘Iowa’ AND server = ‘196.8.7.134’ AND time > ’00:00’; from after [Iowa,196.8.7.134,00:00] to end of [Iowa,196.8.7.134] …[Iowa, 196.8.7.134, 00:02, count] : 97 In the SSTables: [Iowa, 196.8.7.134, 00:00, count] : 130 [Iowa, 196.8.7.134, 00:01, count] : 125 [Iowa, 196.8.7.135, 00:00, count] : 178 [Iowa, 196.8.7.135, 00:0 201
  • 31. Clustering column restrictions (SELECT) 31© 2015. All Rights Reserved. • Without secondary index, a clustering column cannot be restricted if one of the previous ones was not • = restrictions (single and multi) are allowed on any clustering column • IN restrictions (single and multi) are allowed on any clustering column since 2.2 • Prior to 2.2, IN restrictions (single and multi) were only allowed on the last clustering column or set of clustering columns • >, >=, <=, < restrictions (single and multi) are only allowed on the last restricted clustering column or set of clustering columns • CONTAINS and CONTAINS KEY restrictions are only allowed on indexed collections
  • 32. Secondary index queries 32© 2015. All Rights Reserved. CREATE TABLE numberOfRequests ( cluster text, date text, datacenter text, server inet, time text, count int, PRIMARY KEY((cluster, date), datacenter, server, time)); CREATE INDEX ON numberOfRequests (time); …
  • 33. Secondary index queries 33© 2015. All Rights Reserved. CREATE INDEX ON numberOfRequests (time); CREATE LOCAL TABLE numberOfRequests_time_idx ( time text, cluster text, date text, datacenter text, server inet, PRIMARY KEY(time, cluster, date, datacenter, server); … Table Partition Key Table remaining clustering columns
  • 34. IDX-BIDX-D IDX-C IDX-A Secondary index queries 34© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE time = ‘12:00’; Driver
  • 35. Secondary index queries 35© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE time = ‘12:00’; idx SELECT * FROM numberOfRequests_time_idx WHERE time = ‘12:00’; Results (Primary Keys) table SELECT with full PK; [For each] Add to rows
  • 36. Secondary index queries 36© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE time >= ‘12:00’; InvalidRequest: code=2200 [Invalid query] message="PRIMARY KEY column "time" cannot be restricted as preceding column "datacenter" is not restricted" Direct queries on secondary index support only =, CONTAINS or CONTAINS KEY restrictions.
  • 37. Secondary index queries 37© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE time = ‘12:00’ AND count >= 500 ALLOW FILTERING; idx SELECT * FROM numberOfRequests_time_idx WHERE time = ‘12:00’; Results (Primary Keys) table SELECT with full PK; [For each] Add to rows [if count >= 500]
  • 38. IDX-BIDX-D IDX-C IDX-A Secondary index queries 38© 2015. All Rights Reserved. Driver A C D B SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 1’ AND date = ‘2015-09-21’AND time = ‘12:00’; Driver
  • 39. Secondary index queries 39© 2015. All Rights Reserved. Driver SELECT * FROM numberOfRequests WHERE cluster = ‘cluster 1’ AND date = ‘2015-09-21’ AND time = ‘12:00’; idx SELECT * FROM numberOfRequests_time_idx WHERE time = ‘12:00’ AND cluster = ‘1’ AND date = ‘2015-09-21’; Results (Primary Keys) table SELECT with full PK [For each] Add to rows
  • 40. 40© 2015. All Rights Reserved. Driver UPDATE/DELETE statements
  • 41. UPDATE statements 41© 2015. All Rights Reserved. Driver In the UPDATE statements all the primary key columns must be restricted and the only allowed restrictions are: • Prior to 3.0: • Single column = restriction on any partition key or clustering column • Single column IN restriction on the last partition key column • In 3.0: • = and IN single column restrictions on any partition key column • = and IN single or multi column restrictions on any clustering column
  • 42. DELETE statements 42© 2015. All Rights Reserved. Driver Before 3.0, in the DELETE statements all the primary key columns must be restricted and the only allowed restrictions were: • Single column = restriction on any partition key or clustering column • Single column IN restriction on the last partition key column
  • 43. DELETE statements 43© 2015. All Rights Reserved. Driver Since 3.0: • The partition key columns must be restricted by = or IN restrictions • A clustering column might not be restricted if none of the following is • Clustering columns can be restricted by: • Single or multi column = restriction • Single or multi column IN restriction • Single or multi column >, >=, <=, < restriction
  • 44. © 2015. All Rights Reserved. 44 Design your tables for the queries you want to perform.