如何将CQL时间戳配置为%d-%m-%Y%H:%M:%S%z

时间:2018-08-01 07:59:42

标签: cassandra timestamp cql

我在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'强制转换为格式化日期(长)”

1 个答案:

答案 0 :(得分:3)

您在cqlshrc文件中指定的选项用于显示数据,而不用于输入字符串。 Cassandra接受以下documentation中所述的以下格式的数据:

  

yyyy-mm-dd [(T |)HH:MM:SS [.fff]] [(+ |-)NNNN]

因此,您需要以正确的顺序指定日期:年-月-日...

P.S。当您不指定时区时,它取自客户端的配置-您需要通过向timezone文件中添加cqlshrc参数(相同的[ui]部分)来指定默认时区,就像这样:

timezone = Etc/UTC

另请参阅documentation,其中介绍了如何安装诸如pytz之类的可选软件包。