SlideShare a Scribd company logo
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
Become a super modeler
PDF
Cassandra 101
PDF
Oracle Real Application Clusters (RAC) 12c Rel. 2 - Operational Best Practices
PDF
Reading The Source Code of Presto
PDF
Cassandra Introduction & Features
PDF
Tame the small files problem and optimize data layout for streaming ingestion...
PDF
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
PDF
GoldenGateテクニカルセミナー2「Oracle GoldenGate 新機能情報」(2016/5/11)
Become a super modeler
Cassandra 101
Oracle Real Application Clusters (RAC) 12c Rel. 2 - Operational Best Practices
Reading The Source Code of Presto
Cassandra Introduction & Features
Tame the small files problem and optimize data layout for streaming ingestion...
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
GoldenGateテクニカルセミナー2「Oracle GoldenGate 新機能情報」(2016/5/11)

What's hot (20)

PDF
Oracle Exadata Interview Questions and Answers
PDF
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
PPTX
A Survey of HBase Application Archetypes
PPTX
CAPとBASE、ACIDの呪縛
PDF
Building Robust ETL Pipelines with Apache Spark
PDF
Oracle Cloud is Best for Oracle Database - High Availability
PDF
Oracle Clusterware Node Management and Voting Disks
PDF
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
PDF
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
PPTX
Cql – cassandra query language
PDF
Get to know PostgreSQL!
PDF
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PDF
Introduction to Real-time data processing
PPTX
Apache Spark Fundamentals
PPTX
Appache Cassandra
PDF
Introduction to Cassandra
PDF
Tanel Poder - Performance stories from Exadata Migrations
PDF
Oracle Real Application Clusters 19c- Best Practices and Internals- EMEA Tour...
PDF
MongoDB Fundamentals
Oracle Exadata Interview Questions and Answers
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
A Survey of HBase Application Archetypes
CAPとBASE、ACIDの呪縛
Building Robust ETL Pipelines with Apache Spark
Oracle Cloud is Best for Oracle Database - High Availability
Oracle Clusterware Node Management and Voting Disks
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
IoT時代におけるストリームデータ処理と急成長の Apache Flink
A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets with Jules ...
Cql – cassandra query language
Get to know PostgreSQL!
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
Introduction to Real-time data processing
Apache Spark Fundamentals
Appache Cassandra
Introduction to Cassandra
Tanel Poder - Performance stories from Exadata Migrations
Oracle Real Application Clusters 19c- Best Practices and Internals- EMEA Tour...
MongoDB Fundamentals
Ad

Viewers also liked (20)

PDF
Cassandra Summit 2014: CQL Under the Hood
PPTX
A deep look at the cql where clause
PDF
Indexing in Cassandra
PDF
NoSQL Database- cassandra column Base DB
PPTX
Cassandra internals
PDF
Capital One: Using Cassandra In Building A Reporting Platform
PDF
AdStage: Monacella: An Relational Object Database using Cassandra as the Data...
PDF
DataStax: Testing Cassandra Guarantees Under Diverse Failure Modes With Jepsen
PDF
MyDrive Solutions: Case Study: Troubleshooting Production Issues as a Developer.
PDF
DataStax: The Cassandra Validation Harness: Achieving More Stable Releases
PDF
The Last Pickle: Repeatable, Scalable, Reliable, Observable: Cassandra
PDF
CQL Under the Hood
PDF
Silicon Valley Data Science: From Oracle to Cassandra with Spark
PDF
C* Keys: Partitioning, Clustering, & CrossFit (Adam Hutson, DataScale) | Cass...
PDF
Intro to Cassandra
PDF
AddThis: Scaling Cassandra up and down into containers with ZFS
PDF
Hardening cassandra q2_2016
PDF
Hadoop 2.0 - The Next Level
PDF
Stratio: Geospatial and bitemporal search in Cassandra with pluggable Lucene ...
PDF
Cassandra presentation at NoSQL
Cassandra Summit 2014: CQL Under the Hood
A deep look at the cql where clause
Indexing in Cassandra
NoSQL Database- cassandra column Base DB
Cassandra internals
Capital One: Using Cassandra In Building A Reporting Platform
AdStage: Monacella: An Relational Object Database using Cassandra as the Data...
DataStax: Testing Cassandra Guarantees Under Diverse Failure Modes With Jepsen
MyDrive Solutions: Case Study: Troubleshooting Production Issues as a Developer.
DataStax: The Cassandra Validation Harness: Achieving More Stable Releases
The Last Pickle: Repeatable, Scalable, Reliable, Observable: Cassandra
CQL Under the Hood
Silicon Valley Data Science: From Oracle to Cassandra with Spark
C* Keys: Partitioning, Clustering, & CrossFit (Adam Hutson, DataScale) | Cass...
Intro to Cassandra
AddThis: Scaling Cassandra up and down into containers with ZFS
Hardening cassandra q2_2016
Hadoop 2.0 - The Next Level
Stratio: Geospatial and bitemporal search in Cassandra with pluggable Lucene ...
Cassandra presentation at NoSQL
Ad

Similar to DataStax: A deep look at the CQL WHERE clause (20)

PDF
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
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
PDF
Modeling the IoT with TitanDB and Cassandra
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
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
Modeling the IoT with TitanDB and Cassandra

More from DataStax Academy (20)

PDF
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
PPTX
Introduction to DataStax Enterprise Graph Database
PPTX
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
PPTX
Cassandra on Docker @ Walmart Labs
PDF
Cassandra 3.0 Data Modeling
PPTX
Cassandra Adoption on Cisco UCS & Open stack
PDF
Data Modeling for Apache Cassandra
PDF
Coursera Cassandra Driver
PDF
Production Ready Cassandra
PDF
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 1
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 2
PDF
Standing Up Your First Cluster
PDF
Real Time Analytics with Dse
PDF
Introduction to Data Modeling with Apache Cassandra
PDF
Cassandra Core Concepts
PPTX
Enabling Search in your Cassandra Application with DataStax Enterprise
PPTX
Bad Habits Die Hard
PDF
Advanced Data Modeling with Apache Cassandra
PDF
Advanced Cassandra
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Cassandra on Docker @ Walmart Labs
Cassandra 3.0 Data Modeling
Cassandra Adoption on Cisco UCS & Open stack
Data Modeling for Apache Cassandra
Coursera Cassandra Driver
Production Ready Cassandra
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 2
Standing Up Your First Cluster
Real Time Analytics with Dse
Introduction to Data Modeling with Apache Cassandra
Cassandra Core Concepts
Enabling Search in your Cassandra Application with DataStax Enterprise
Bad Habits Die Hard
Advanced Data Modeling with Apache Cassandra
Advanced Cassandra

Recently uploaded (20)

PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Empathic Computing: Creating Shared Understanding
PDF
Encapsulation theory and applications.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
SOPHOS-XG Firewall Administrator PPT.pptx
Machine learning based COVID-19 study performance prediction
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...
Empathic Computing: Creating Shared Understanding
Encapsulation theory and applications.pdf
Assigned Numbers - 2025 - Bluetooth® Document
Reach Out and Touch Someone: Haptics and Empathic Computing
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Network Security Unit 5.pdf for BCA BBA.
MIND Revenue Release Quarter 2 2025 Press Release
The Rise and Fall of 3GPP – Time for a Sabbatical?
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Mobile App Security Testing_ A Comprehensive Guide.pdf
Unlocking AI with Model Context Protocol (MCP)
Group 1 Presentation -Planning and Decision Making .pptx
Digital-Transformation-Roadmap-for-Companies.pptx

DataStax: 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.