Mon problème principal est de paginer le jeu de résultats Cassandra sur une table avec une clé de partition composite. Cependant, j'essaie de l'affiner avec un scénario simple. Dites, j'ai une table,Requête CQL dans Cassandra avec clé de partition composite
CREATE TABLE numberofrequests (
cluster text,
date text,
time text,
numberofrequests int,
PRIMARY KEY ((cluster, date), time)
) WITH CLUSTERING ORDER BY (time ASC)
et moi avons des données comme,
cluster | date | time | numberofrequests
---------+------------+------+------------------
c2 | 01/04/2015 | t1 | 1
c2 | d1 | t1 | 1
c2 | 02/04/2015 | t1 | 1
c1 | d1 | t1 | 1
c1 | d1 | t2 | 2
Question: Est-il possible que je peux interroger les données pour le groupe = c2? Je ne me soucie pas de la 'date' et honnêtement, je garde cela uniquement pour le partitionnement afin d'éviter les points chauds. J'ai essayé ce qui suit,
select * from numberofrequests where token(cluster,date)>=token('c2','00/00/0000');
select * from numberofrequests where token(cluster,date)>=token('c2','1');
select * from numberofrequests where token(cluster,date)>=token('c2','a');
select * from numberofrequests where token(cluster,date)>=token('c2','');
Mon schéma utilise le partitionneur par défaut (Murmur3Partitioner). Est-ce réalisable du tout?
Il est intéressant d'ajouter que vous pouvez avoir en clé de clustering une sorte de seau au lieu de la date, par exemple le jour de la semaine. Par conséquent toutes les données se propageraient par "cluster" et le jour de la semaine. Pour récupérer ces données, vous devez envoyer 7 demandes pour un cluster. – piotrwest
Hmm. Au début, j'avais l'impression que la fonction token() est une alternative dans les schémas non ByteOrderedPartitioner, pour mettre à disposition des clés de partition de requête. Cependant, je crois que ce n'est pas le cas. Lorsque j'ai parcouru les documents CQL 3.3 maintenant, il mentionne que «les résultats ne seront pas toujours conformes aux attentes». J'accepterai votre réponse comme la bonne réponse. Maintenant je continue à me demander à quoi sert la fonction token()! –
La fonction 'token()' est la seule façon de travailler avec les plages de clés de partition. L'utilisation de quelque chose comme 'where cluster> 'c2' et la date> '00/00/0000'' n'est simplement pas possible car seule la comparaison égale est autorisée pour les conditions sur le PK. –