CQL-Cassandra query überprüfen Sie mehrere Werte
Wie kann ich prüfen, ob eine nicht-Primärschlüssel-Feld der Wert ist entweder 'A' oder 'B' mit einer CQL-Cassandra query? (Ich bin Cassandra 2.0.1)
Hier ist die definition der Tabelle:
CREATE TABLE my_table (
my_field text,
my_field2 text,
PRIMARY KEY (my_field)
);
Habe ich versucht:
1> SELECT * FROM my_table WHERE my_field2 IN ('A', 'B');
2> SELECT * FROM my_table WHERE my_field2 = 'A' OR my_field = 'B' ;
Der erste scheiterte mit diesem messeage:
Bad Request: IN predicates on non-primary-key columns (my_field2) is not yet supported
Die zweite ist fehlgeschlagen, da CQL-Cassandra nicht unterstützt ODER keyword -
Konnte ich nicht, dass diese einfache Abfrage funktioniert (mit einem ziemlich geradlinig). Ich bin ziemlich frustriert im Umgang mit CQL-Abfragen im Allgemeinen. Ist es, weil Cassandra ist nicht reif genug und hat wirklich schlechte Unterstützung mit Abfragen, oder liegt es an mir, was sich ändern muss ist die Denkweise?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die intentionale Funktionalität von cassandra. Sie können keine Abfrage mit einer WHERE-Klausel auf Spalten, die nicht
Dies ist, weil Ihre Daten partitioniert um einen ring der cassandra-Knoten. Sie wollen vermeiden, dass zu Fragen, der gesamte ring zurück zu kehren, die Antwort auf Ihre Abfrage. Idealerweise sollten Sie in der Lage sein, um das abrufen von Daten aus einem einzelnen Knoten in dem ring
In der Regel in cassandra, die Sie wollen, um die Struktur der Tabelle entsprechend Ihrer Abfragen im Gegensatz zu relationalen Normalisierung. So haben Sie ein paar Optionen, um damit umzugehen.
1) schreiben Sie Ihre Daten auf mehrere Tabellen unterstützt verschiedene Abfragen. In Ihrem Fall möchten Sie möglicherweise erstellen Sie eine zweite Tabelle als
Dann ist deine erste Abfrage wird korrekt zurück
2) Erstellen Sie Ihre Tabelle mit einem zusammengesetzten Schlüssel, der als
Mit dieser Methode, wenn Sie nicht geben Sie eine Abfrage mit dem Wert für my_field dann werden Sie brauchen, um hängen Sie Ihre Abfrage mit einem qualifier zu sagen, cassandra, dass Sie wirklich wollen, um die Abfrage der gesamte ring
-Bearbeiten-
können nicht über einen sekundären index für die Suche nach für mehrere Werte. Pro CQL-Dokumentation
http://www.datastax.com/documentation/cql/3.0/webhelp/cql/ddl/ddl_primary_index_c.html
"Ein index ist eine Datenstruktur, die ermöglicht die schnelle, effiziente Suche nach Daten, die mit einem bestimmten Zustand."
So, geben Sie es ein und nur ein Wert.
Wenn Sie verwenden möchten Ihre 'my_field2' als filter, den Sie erstellen index auf 'my_field2'
Beispiel:
danach können Sie Sie filtern, indem Sie my_field2:
Beispiel:
HINWEIS: achten Sie auf Ihre Spalte Typ(int,text,..) beim filtern sonst wird ein Fehler ausgelöst.