【发布时间】:2019-01-08 17:23:58
【问题描述】:
我在 Windows 10 Pro 上使用 Cassandra。我创建了以下表架构:
CREATE TABLE testee (
serialno int,
changeDate timestamp,
value text,
devicename text,
PRIMARY KEY ((serialno, changeDate), changeDate)
) WITH CLUSTERING ORDER BY (changeID DESC);
给定的日期格式(时间戳)是: %d-% m-%-Y% H:%M:%S%z
Cassandra 默认时间戳为: %Y-% m-%-d% H:%M:%S%z
对于日期格式的转换,我已按照 Datastax 的说明进行操作:
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshUsingCqlshrc.html
现在cqlshrc文件在:
C:\Users\tlq\.cassandra\cqlshrc
根据这个已解决的问题Cassandra Timestamp data type,'time_format' 必须插入 cqlshrc 文件的 [ui] 部分。我这样做了:
[ui]
;; Used for displaying timestamps (and reading them with COPY)
datetimeformat = %d-%m-%Y %H:%M:%S%z
;;Used for used displaying timestamps generell
time_format = %d-%m-%Y %H:%M:%S%z
通过使用插入命令:
INSERT INTO foo(serialno, changedate, devicename) VALUES(2,'07-12-2011 13:56:20','fooname',34);
以下消息仍然出现
InvalidRequest:来自服务器的错误:code=2200 [Invalid query] message="Unable to >coerce '07-12-2014 13:56:20' to a formatted date (long)"
【问题讨论】:
-
你也用 CQLSHRC="C:\Users\tlq\ .cassandra\cqlshrc" 来启动 cqlsh 吗?我不确定这在 Windows 上的效果如何,但也许你需要转义一些字符。基本上我要问的是:你确定你的 cqlshrc 文件被使用了吗?您能否为主机或端口添加一些错误配置以验证文件是否已使用。
-
我听从了您的建议,尝试了错误的端口 (9041) 和主机 (127.0.0.2)。 cqlshrc 似乎在正确的位置: Connection error: ('Unable to connect to any servers', {'127.0.0.2': error (10061, "Tried connected to [('127.0.0.2', 9041)] Last错误:无法建立连接,因为目标机器主动拒绝它")}}
-
你用什么插入它?在大多数语言中,将日期转换为时间戳(长)是微不足道的,这消除了很多歧义。
-
我们使用 sql: SELECT convert(datetime, '22-10-2013 20:44:11', 120) -- yyyy-mm-dd hh:mm:ss(24h)