使用datastax python-driver从cassandra获取正确的时间戳
Posted
技术标签:
【中文标题】使用datastax python-driver从cassandra获取正确的时间戳【英文标题】:Getting correct timestamp from cassandra using datastax python-driver 【发布时间】:2013-11-09 16:03:07 【问题描述】:我正在使用 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
如您所见,来自 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
您可以看到 python-driver 的时间戳 是 2013-10-30 05:02:45.004000
,这与 CQL 不同。不仅时间不同,而且表现形式也发生了变化。这不能用于后续查询中的比较。
问题
-
在 python 中检索时间戳时我做错了什么?
有没有办法将纪元时间输出为 int 而不是 datetime 格式?
这与时钟同步或时区有关吗?
谁能帮我解决这个问题,以便可以重复使用 python 检索的时间戳与 cass 时间戳进行比较?
提前致谢。感谢您的帮助
设置
单主机运行虚拟机; cass 沙箱 - 3 个无头虚拟机作为单个 dc 集群运行; python 代码正在从主机执行; VM 日期、时间使用 ntp 与主机同步 [cqlsh 4.0.0 |卡桑德拉 2.0.0 | CQL 规范 3.1.0 | Thrift 协议 19.37.0]【问题讨论】:
【参考方案1】:看起来 cqlsh 正在显示您当地时区的时间戳(即 +0530)。 python 驱动程序以 UTC 格式返回日期时间。值得一提的是,数据作为 unix 时间戳存储在 Cassandra 中,没有时区的概念。
我的建议是,在将其显示给用户之前,您始终使用 UTC 作为日期时间。
【讨论】:
以上是关于使用datastax python-driver从cassandra获取正确的时间戳的主要内容,如果未能解决你的问题,请参考以下文章
使用 datastax 进行错误的 SOlr 索引。从 1 个节点扩展到 2 个 cassandra 节点和 1 个搜索节点
从 Datastax Cassandra 中提取并使用 Sqoop 加载到 HBase
从 c#datastax 驱动程序关闭 cassandra 集群时出错