Groovy 日期选择查询在Cassandra中未按预期工作
我有一个域类,下面是声明:Groovy 日期选择查询在Cassandra中未按预期工作,groovy,cassandra,Groovy,Cassandra,我有一个域类,下面是声明: class Emp{ static mapWith = "cassandra" String name Date doj } data: id name doj 1 X 01-01-2010 2 Y 01-20-2012 卡桑德拉查询: select * from emp
class Emp{
static mapWith = "cassandra"
String name
Date doj
}
data:
id name doj
1 X 01-01-2010
2 Y 01-20-2012
卡桑德拉查询:
select * from emp_schema.emp where doj='01-01-2010';
错误:
code=2200[Invalid query]message=“无法强制将'01-01-2010'强制为格式化日期(长)”在cassandra中查询日期的格式为 Carlos是正确的,因为Cassandra要求日期的格式为
yyy-mm-dd
但只有当doj
是您的分区键时,此查询才会工作。如果您的主键未设置为将doj
指示为分区键,则无法进行查询
我会专门设计您的表以满足您的查询。由于多个emp[loyee]可能具有相同的doj
,因此该定义在doj
上进行分区,并在id
上进行集群以实现唯一性:
create table emp_by_doj (
doj date,
id int,
name text,
primary key (doj,id));
然后可以按特定日期进行查询,并为其返回多行:
> SELECT * FROM emp_by_doj WHERE doj='2017-06-01';
doj | id | name
------------+------+-------
2017-06-01 | 7721 | Sarah
2017-06-01 | 8122 | Sam
(2 rows)
您可以分享您试图查询的表的定义吗?我使用的是Cassandra 2.2.3,因此doj字段的数据库表结构中是timestamp。我只想保存日期而不保存时间。有哪些选项可以只保存日期而不修改cqlshrc文件?
> SELECT * FROM emp_by_doj WHERE doj='2017-06-01';
doj | id | name
------------+------+-------
2017-06-01 | 7721 | Sarah
2017-06-01 | 8122 | Sam
(2 rows)