【发布时间】:2016-07-11 05:04:42
【问题描述】:
最近我开始研究 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 和 create_date 从我的 Java 代码中查询和获取记录,如何在 Java 代码中制作像 2016-03-15 00:00:00+0000 这样的精确模式,因为如果我提供它不会检索仅日期在 where 条件下,或者有没有更好的方法来检索使用 Java 代码。
【问题讨论】:
标签: java cassandra timestamp cql datastax