Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理Cassandra时间戳_Java_Cassandra_Timestamp_Cql_Datastax - Fatal编程技术网

Java 处理Cassandra时间戳

Java 处理Cassandra时间戳,java,cassandra,timestamp,cql,datastax,Java,Cassandra,Timestamp,Cql,Datastax,最近我开始研究cassandra,我遇到了一些使用cql和Java处理cassandra时间戳的问题 下面是我的cassandra表模式示例 CREATE TABLE emp ( empid int, create_date timestamp, deptid int, PRIMARY KEY (empid, create_date) ) 以下是我的问题: 1)事实上,我只需要日期(我不担心时间),在我的表模式中,我使用了时间戳数据类型,是否有任何类似日期的数据

最近我开始研究cassandra,我遇到了一些使用cql和Java处理cassandra时间戳的问题

下面是我的cassandra表模式示例

CREATE TABLE emp (
    empid int,
    create_date timestamp,
    deptid int,
    PRIMARY KEY (empid, create_date)
)
以下是我的问题:

1)事实上,我只需要日期(我不担心时间),在我的表模式中,我使用了时间戳数据类型,是否有任何类似日期的数据类型只存储日期而不是时间戳

2)若并没有时间戳的替代品,下面的数据类型是我如何手动将记录插入表中的

Insert into emp(empId, deptId, create_date) values(1,2,'2016-03-15 00:00:00+0000');
当我尝试使用cql查询以检索记录时,如下所示

select * from emp where create_date='2016-03-15' and empid=1;
它没有返回任何记录,所以我使用下面的查询

 select * from emp where create_date='2016-03-15 00:00:00+0000' and empid=1;
上面的查询返回了记录,所以如何查询,以便我只需要获取带有日期的记录

3)我正在使用datastax 2.1 JAVA API与cassandra通信,下面是我如何从JAVA检索时间戳列的代码

row.getDate("create_date")
getDate方法返回java.util.date(更高版本返回com.datastax.driver.core.LocalDate

当我试图从代码中获取日期时,如果我的表中的记录是2016-03-15 00:00:00+0000,那么它返回的日期会少一天,但从我的代码中,它会显示类似2016-03-14 EDT(这是因为时区问题而少一天),如果它的时区问题,我应该在检索时在Java代码中设置时区吗


4)如果我想根据empId从我的Java代码中查询并获取记录,并创建日期如何在Java代码中创建准确的模式,如
2016-03-15 00:00:00+0000
,因为如果我只在where条件中提供日期,那么它不是检索,或者使用Java代码检索是否有更好的方法。

回到您的示例:

在emp(empId、deptId、create_date)中插入值(1,2,'2016-03-15 00:00:00+0000')

上述语句将为2016-03-15 00:00 UTC创建时间戳值

从emp中选择*,其中create_date='2016-03-15'和empid=1

select将与从本地时区中给定日期创建的时间戳匹配。您在这里要做的是使用
create_date='2016-03-15Z'
专门按UTC进行查询


由于Java中也存在与时区相关的问题,因此最简单的选择是简单地使用日期的字符串表示

感谢@stefan podkowinski抽出时间,我有一些问题1)正如您建议的“只使用日期的字符串表示法”。这是否意味着我需要使用字符串datatime而不是表模式2中的时间戳2)正如您建议的使用“create_date='2016-03-15Z'查询”一样使用cqlsh可以很好地工作,但是如何使用java来实现这一点(我是如何通过使用joda datetime并将时区设置为UTC来获得正确的日期的)