使用datastax python-driver从cassandra获取正确的时间戳

qui*_*rmd 5 python datetime timestamp cassandra datastax

我正在使用datastax python-driver从表中检索时间戳.我要做的是将先前检索的时间戳存储在var中,并在下一个查询中使用它来检索大于前一个时间戳的时间戳.该查询基本上是这样的:

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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,CQL时间戳2013-10-30 10:32:45+0530.但是当我通过python-driver检索它时结果是不同的(我在不同的系统上执行python查询,而不是在任何cass节点上执行):

>>> 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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,python-driver时间戳2013-10-30 05:02:45.004000,它与CQL 的时间戳不同.不仅时间不同,而且表现也发生了变化.这不能用于后续查询中的比较.

质询

  1. 在python中检索时间戳时我做错了什么?
  2. 有没有办法将纪元时间输出为int而不是datetime格式?
  3. 这与时钟同步或时区有关吗?
  4. 任何人都可以帮我解决这个问题,以便python检索的时间戳可以重用来与cass时间戳进行比较吗?

提前致谢.感谢您的帮助

建立

  • 单主机运行vms;
  • cass sandbox- 3个无头vms作为单个dc集群运行;
  • 从主机执行的python代码;
  • VM使用ntp与主机同步的日期,时间
  • [cqlsh 4.0.0 | Cassandra 2.0.0 | CQL规范3.1.0 | 节俭协议19.37.0]

Tyl*_*bbs 5

看起来cqlsh正在显示当地时区的时间戳(+0530).python驱动程序以UTC格式返回日期时间.对于它的价值,数据作为unix时间戳存储在Cassandra中,它没有时区概念.

我的建议是,在将日期显示给用户之前,始终使用UTC作为日期时间.