Zeitstempelvergleich in Cassandra

7

Wie in der Abbildung gezeigt, gibt die Abfrage mit exakter Zeitmarke (2013-08-01 15:02:56) kein Ergebnis zurück, obwohl eine Zeile mit diesem Zeitstempel existiert, aber Ergebnisse mit dieser Zeile liefert, wenn nach

abgefragt wird
  

timestamps > '2013-08-01 15:02:56'

Ist das in Cassandra normal?

    
Viswanadh Kumar Reddy Vuggumud 02.08.2013, 12:02
quelle

2 Antworten

9

Ja, das ist das erwartete Verhalten.

Laut den Cassandra-Dokumenten und hier hier , cassandra speichert Zeitstempel als "Millisekunden seit der Standard-Basiszeit, die als Epoche bekannt ist".

Wenn Sie Ihre Daten einfügen, fügen Sie einen Millisekunden-Wert mit höherer Granularität als Ihr "2013-08-01 15:02:56" (Millisekundenwert von "jetzt" gegenüber nur Sekunden und 0 Millisekunden) ein. Ein EQ-Operator wird niemals übereinstimmen, sofern der eingefügte Zeitstempel keine 0 Millisekunden hat.

Das wird funktionieren

%Vor%

Wenn Sie also cqlsh abfragen, wird Ihre datetime in eine Ganzzahl (Millisekunden) übersetzt, die sich nur von dem Wert unterscheidet, den Sie ursprünglich eingefügt haben. Ihr eingegebener Wert wird einige Millisekunden NACH "2013-08-01 15:02:56" sein. Sie fragen nach GENAU "2013-08-01 15:02:56" (und 0 Millisekunden). Die Verwendung eines GT- oder LT-Operators wird übereinstimmen, ein EQ-Operator nicht.

Hoffe das hilft!

    
omnibear 02.08.2013, 13:26
quelle
11

Wie omnibear sagte ich denke, Ihr Problem ist, dass der Zeitstempel mit Millisekunden & gt; 0 gespeichert wird.

Um zu sehen, dass die nächste Abfrage gestartet wird:

%Vor%

Überprüfen Sie dann die letzten Zahlen, die die Millisekunden sind.

Wenn die letzten Zahlen & gt; 0 sind (was ich erwarte), erklärt dies, warum Ihre = Behauptung falsch ist.

Sie haben also zwei Möglichkeiten:

  1. Entfernen Sie Millisekunden, wenn Sie die Daten speichern
  2. Abfrage mit Bereichen, etwa ..

... gib mir Ereignisse nach 15:02:56, aber vor 15:02:57:

%Vor%     
Carlos Verdes 30.09.2015 10:35
quelle

Tags und Links