使用datastax pythondri从cassandra获取正确的时间戳

2024-04-28 07:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用datastax python驱动程序从表中检索时间戳。我要做的是将之前检索到的时间戳存储在一个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

如您所见,来自CQL的时间戳是2013-10-30 10:32:45+0530。但是,当我通过python驱动程序检索它时,结果是不同的(我在不同的系统上执行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

如您所见,来自python驱动程序的时间戳是2013-10-30 05:02:45.004000,这与CQL不同。不仅时间不同,而且表现形式也发生了变化。这不能用于后续查询中的比较。

问题

  1. 在python中检索时间戳时,我做错了什么?
  2. 是否有方法将纪元时间输出为int而不是datetime格式?
  3. 这与时钟同步或时区有关吗?
  4. 有谁能帮我一下,这样python检索到的时间戳就可以被重用来与cass时间戳进行比较吗?

提前谢谢。感谢你的帮助

设置

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

Tags: keyfrommessagedatetimetime驱动程序时间where
1条回答
网友
1楼 · 发布于 2024-04-28 07:27:13

看起来cqlsh正在显示本地时区(即+0530)中的时间戳。python驱动程序返回UTC格式的日期时间。值得一提的是,数据以unix时间戳的形式存储在Cassandra中,而unix时间戳没有时区的概念。

我的建议是,在向用户显示之前,始终使用UTC表示日期时间。

相关问题 更多 >