2016-10-19 1 views
1

create table:caassandra: condition multiple sur la même colonne

CREATE TABLE notifications (
    id uuid PRIMARY KEY, 
    user_id bigint, 
    received_datetime timestamp, 
); 

cqlsh:

select count(*) 
    from notifications 
    where received_datetime >='2016-10-11 00:00:00' 
    and received_datetime >='2016-10-18 00:00:00' 
    ALLOW FILTERING; 

erreur a: -

InvalidRequest: Error from server: code=2200 [Invalid query] message="More than one restriction was found for the start bound on received_datetime" 

Répondre

1

Je suppose que ce que vous voulez réellement est la requête suivante :

select count(*) from notifications 
    where received_datetime >='2016-10-11 00:00:00' 
    and received_datetime <='2016-10-18 00:00:00' 
    ALLOW FILTERING; 

Sinon, vous pouvez fusionner deux conditions liées plus bas dans l'un en choisissant plus restrictive d'entre eux:

select count(*) from notifications 
    where received_datetime >= '2016-10-18 00:00:00' 
    ALLOW FILTERING; 
+0

I Missed ce point grâce. –

+0

La requête que vous faites ci-dessus avec le ALLOW FILTERING est un anti-pattern dans Cassandra. Cela entraînera une opération de collecte de dispersion sur l'ensemble du cluster qui sera horriblement lente et expirera très probablement avec une quantité raisonnablement importante de données. Vous devez modifier la structure de votre table pour satisfaire la requête que vous lui demandez. Cela signifie que vous devez configurer une partition et une clé primaire différentes pour répondre à cette requête, sauf si vous connaissez l'identifiant. Dans ce cas, vous pouvez simplement ajouter received_datetime comme colonne de cluster et y effectuer une requête de plage. – bechbd