2013-10-30 56 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的日期时间,直到显示给用户。