我在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,必须在cqlshrc文件的[ui]部分中插入“ time_format”。我是这样做的:
[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:来自服务器的错误:代码= 2200 [Invalid query] message =“无法强制将'07 -12-2014 13:56:20'强制转换为格式化日期(长)”
答案 0 :(得分:3)
您在cqlshrc
文件中指定的选项用于显示数据,而不用于输入字符串。 Cassandra接受以下documentation中所述的以下格式的数据:
yyyy-mm-dd [(T |)HH:MM:SS [.fff]] [(+ |-)NNNN]
因此,您需要以正确的顺序指定日期:年-月-日...
P.S。当您不指定时区时,它取自客户端的配置-您需要通过向timezone
文件中添加cqlshrc
参数(相同的[ui]
部分)来指定默认时区,就像这样:
timezone = Etc/UTC
另请参阅documentation,其中介绍了如何安装诸如pytz
之类的可选软件包。