2013-10-30 86 views
5

我使用datastax python-driver從表中檢索時間戳。我試圖做的是將先前檢索到的時間戳存儲在一個var中,並在下一個查詢中使用它來檢索大於前一個時間戳的時間戳。該查詢基本上是這樣的:使用datastax python-driver從cassandra獲取正確的時間戳

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 

正如你可以看到從CQL的時間戳2013-10-30 10:32:45+0530。但是,當我通過Python驅動器檢索的結果是不同的(我執行,而不是任何中國社會科學院節點的不同系統上的蟒蛇查詢):

>>> 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 

正如你可以看到從蟒蛇時間戳驅動程序2013-10-30 05:02:45.004000,與CQL不同。不僅時間不同,而且代表性也發生了變化。這不能用於後續查詢中的比較。

質詢

  1. 我在做什麼錯,而在蟒蛇檢索時間戳?
  2. 有沒有辦法輸出紀元時間爲int而不是日期時間格式?
  3. 這是關於時鐘同步或時區相關的事嗎?
  4. 任何人都可以幫助我這樣做,使python檢索時間戳可以重用與cass時間戳進行比較嗎?

在此先感謝。感謝您的幫助

SETUP

  • 單主機運行的虛擬機;
  • cass sandbox- 3個無頭虛擬機作爲單個dc羣集運行;
  • 從主機執行的python代碼;
  • 虛擬機的日期,時間與主機使用NTP
  • [4.0.0 cqlsh同步| Cassandra 2.0.0 | CQL規範3.1.0 | Thrift協議19.37.0]

回答

5

它看起來像cqlsh顯示在您的本地時區(這是+0530)的時間戳。 python驅動程序以UTC格式返回datetimes。對於它的價值,數據作爲unix時間戳存儲在Cassandra中,該時間戳沒有時區的概念。

我的建議是,你總是使用UTC的日期時間,直到顯示給用戶。