2013-10-30 5 views
5

Ich erhalte Zeitstempel aus einer Tabelle mit dem datastax Python-Treiber. Was ich versuche, ist, den zuvor abgerufenen Zeitstempel in einer Variablen zu speichern und ihn in der nächsten Abfrage zu verwenden, um einen Zeitstempel zu erhalten, der größer als der vorherige ist. Die Abfrage sieht grundsätzlich wie folgt:Ich bekomme den richtigen Zeitstempel von Cassandra mit dem Datenastax Python-Treiber

cqlsh> SELECT insert_time, message FROM cf WHERE message_key='q1' AND insert_time>'2013-10-30 10:32:44+0530' ORDER BY insert_time ASC LIMIT 1; 


insert_time    | message 
--------------------------+---------------------------------- 
2013-10-30 10:32:45+0530 | 83500612412011e3ab6c1c3e84abd9db 

Wie Sie die Zeitstempel von CQL2013-10-30 10:32:45+0530 ist zu sehen. Aber wenn ich es über Python-Treiber abzurufen sind die Ergebnisse unterschiedlich (ich die Ausführung der Python-Abfrage auf einem anderen System und nicht auf einem der Cass Knoten):

>>> from cassandra.cluster import Cluster 
>>> c = Cluster([10.60.60.2]) 
>>> session = c.connect() 
>>> q = "SELECT insert_time, message FROM cf WHERE message_key='q1' AND insert_time>'2013-10-30 10:32:44+0530' ORDER BY insert_time ASC LIMIT 1" 
>>> rows = session.execute(q) 
>>> print rows 
[Row(insert_time=datetime.datetime(2013, 10, 30, 5, 2, 45, 4000), message=u'83500612412011e3ab6c1c3e84abd9db')] 
>>> timestamp = rows[0][0] 
>>> print t 
2013-10-30 05:02:45.004000 

Wie Sie die Zeitstempel von Python sehen -driver ist 2013-10-30 05:02:45.004000, die sich von der CQL-Version unterscheidet. Nicht nur die Zeit ist anders, sondern auch die Darstellung hat sich geändert. Dies kann nicht für den Vergleich in nachfolgenden Abfragen verwendet werden.

FRAGEN

  1. Was mache ich falsch, während Zeitstempel in Python abrufen?
  2. Gibt es eine Möglichkeit, Epochzeit als Int anstelle des Datetime-Formats auszugeben?
  3. Hat das etwas mit Uhrsynchronisation oder Zeitzonenbezug zu tun?
  4. Kann mir jemand dabei helfen, so dass die Python abgerufenen Zeitstempel wiederverwendet werden können, um gegen CASS Zeitstempel zu vergleichen?

Vielen Dank im Voraus. Schätzen Sie Ihre Hilfe

SETUP

  • einzigen Host-Computer ausgeführt vms;
  • cass sandbox- 3 kopflose vms, die als einzelner dc-Cluster ausgeführt werden;
  • Python-Code wird vom Host-Rechner ausgeführt;
  • VMs Datum, Uhrzeit synchronisiert mit Host mit ntp
  • [cqlsh 4.0.0 | Kassandra 2.0.0 | CQL-Spezifikation 3.1.0 | Thrift Protokoll 19.37.0]

Antwort

5

Es sieht aus wie cqlsh wird der Zeitstempel in Ihrer lokalen Zeitzone anzeigt (was 0530). Der Python-Treiber gibt Datumswerte in UTC zurück. Für was es wert ist, werden die Daten in Cassandra als Unix-Zeitstempel gespeichert, der kein Konzept der Zeitzonen hat.

Mein Vorschlag ist, dass Sie UTC immer für Datumswerte verwenden, bis sie dem Benutzer angezeigt werden.