cassandra cql cql3 cassandra-2.1

cassandra - CQL con una fila ancha: ¿cómo obtener el conjunto más reciente?



cql3 cassandra-2.1 (1)

¿Cómo escribiría el CQL para obtener el conjunto de datos más reciente de cada fila?

Estoy investigando la transición de MSSQL a Cassandra y estoy empezando a comprender los conceptos. Mucha investigación ha sido de gran ayuda, pero no he encontrado una respuesta a esto (sé que debe haber una forma):

CREATE TABLE WideData { ID text, Updated timestamp, Title text, ReportData text, PRIMARY KEY (ID, Updated) } WITH CLUSTERING ORDER (Updated DESC) INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES (''aaa'', NOW, ''Title'', ''Blah blah blah blah'') INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES (''bbb'', NOW, ''Title'', ''Blah blah blah blah'')

espere 1 minuto:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES (''bbb'', NOW, ''Title 2'', ''Blah blah blah blah'')

espera 3 minutos:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES (''aaa'', NOW, ''Title 2'', ''Blah blah blah blah'')

espera 5 minutos:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES (''aaa'', NOW, ''Title 3'', ''Blah blah blah blah'')

¿Cómo escribiría el CQL para obtener el conjunto de datos más reciente de cada fila?

SELECCIONAR ID, Título FROM WideRow - me da 5 filas, ya que pivota los datos por mí.

Básicamente quiero que los resultados para (ID SELECCIONAR, Título FROM WideRow WHERE .....) sean:

ID Title aaa, Title3 bbb, Title2

Además, ¿hay alguna manera de contar el número de conjuntos de datos en una fila ancha?

Esencialmente el equivalente de TSQL: SELECT ID, Count (*) FROM Table GROUP BY ID

ID Count aaa 3 bbb 2

Gracias

Además, también se agradecerá cualquier referencia para obtener más información sobre este tipo de consultas.


Con su modelo de datos actual, solo puede consultar la fila más reciente por clave de partición. En tu caso, eso es ID .

SELECT ID, Title FROM WideData WHERE ID=''aaa'' LIMIT 1

Como ha indicado su orden de agrupamiento en Updated en orden DESCending, la fila con la marca de tiempo Updated más reciente se devolverá primero.

Teniendo en cuenta los resultados deseados, continuaré y asumiré que no desea consultar cada clave de partición individualmente. Cassandra solo mantiene el orden de conjunto de resultados CQL por clave de partición. Además, Cassandra no es compatible con la agregación. Entonces, realmente no hay forma de obtener el "más reciente" para todas sus ID al mismo tiempo, ni existe una forma de obtener un informe de cuántas actualizaciones tiene cada ID .

Con el modelado de datos Cassandra, necesita construir sus tablas para satisfacer sus consultas. La "planificación" de las consultas no es realmente un punto fuerte de Cassandra (como lo estás descubriendo). Para obtener las actualizaciones más recientes por ID , deberá crear una tabla de consulta adicional diseñada para almacenar solo la actualización más reciente para cada ID. Del mismo modo, para obtener el recuento de las actualizaciones de cada ID , puede crear una tabla de consulta adicional utilizando los correctores para adaptarse a esa consulta.

tl; dr

En Cassandra, la desnormalización y el almacenamiento redundante de datos es la clave. Para algunas aplicaciones, es posible que tenga una tabla para cada consulta que necesite para respaldar ... y eso está bien.