Iterando a través de la fila ancha de Cassandra con CQL3
¿Cómo puedo incluir un rango de columnas compuestas con CQL3?
Considera lo siguiente:
CREATE TABLE Stuff (
a int,
b text,
c text,
d text,
PRIMARY KEY (a,b,c)
);
En Cassandra, lo que esto hace de manera efectiva es crear una familia de columnas con filas de enteros (valores de a) y con CompositeColumns compuestas de los valores de b y c y la cadena literal 'd'. Por supuesto, todo esto está cubierto por CQL3 para que podamospensar que estamos insertando en filas de bases de datos individuales ... pero estoy divagando.
Y considere el siguiente conjunto de entradas:
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','P','whatever0');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','Q','whatever1');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','R','whatever2');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','S','whatever3');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'A','T','whatever4');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','P','whatever5');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','Q','whatever6');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','R','whatever7');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','S','whatever8');
INSERT INTO Stuff (a,b,c,d) VALUES (1,'B','T','whatever9');
En mi caso de uso actual, quiero leer todos los valores de Stuff,n
valores a la vez. ¿Cómo hago esto? Aquí está mi toma actual usandon=4
:
SELECT * FROM Stuff WHERE a=1 LIMIT 4;
Y como era de esperar me sale:
a | b | c | d
---+---+---+-----------
1 | A | P | whatever0
1 | A | Q | whatever1
1 | A | R | whatever2
1 | A | S | whatever3
El problema con el que me encuentro es ¿cómo obtengo los 4 siguientes? Aquí está mi intento:
SELECT * FROM Stuff WHERE a=1 AND b='A' AND c>'S' LIMIT 4;
Esto no funciona porque hemos restringido b para que sea igual a 'A', ¡lo cual es algo razonable! Pero no he encontrado nada en la sintaxis de CQL3 que me permita seguir iterando de todos modos. Desearía poder hacer algo como:
SELECT * FROM Stuff WHERE a=1 AND {b,c} > {'A','S'} LIMIT 4;
¿Cómo logro el resultado deseado? A saber, ¿cómo puedo hacer que CQL3 regrese?
a | b | c | d
---+---+---+-----------
1 | A | T | whatever0
1 | B | P | whatever1
1 | B | Q | whatever2
1 | B | R | whatever3