最近我开始研究 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 美国东部时间(由于时区问题,这减少了一天),如果它的时区问题,我应该在检索时在我的Java代码中设置时区
4)如果我想根据 empId 和 create_date 从 Java 代码中查询并获取记录,如何制作精确的模式,如2016-03-15 00:00:00+0000
在Java代码中,因为如果我只提供where条件下的日期,它就不会检索,或者是否有更好的方法使用Java代码检索。