【问题标题】:Date selection query is not working as expected in Cassandra日期选择查询在 Cassandra 中未按预期工作
【发布时间】:2019-04-30 22:20:35
【问题描述】:

我有一个域类,下面是声明:

class Emp{

static mapWith = "cassandra"
String name
Date doj
}

data:
id                 name              doj
1                  X                 01-01-2010
2                  Y                 01-20-2012

Cassandra 查询:

  select * from emp_schema.emp where doj='01-01-2010';

错误: code=2200 [Invalid query] message="Unable to coerce '01-01-2010' to a formatted date (long)"

【问题讨论】:

  • 能否分享一下您要查询的表的定义?

标签: groovy cassandra


【解决方案1】:

在cassandra中查询日期的格式是yyyy-mm-dd

【讨论】:

  • 我使用的是 Cassandra 2.2.3,所以在 doj 字段的数据库表结构中是时间戳。我只想保存日期而不是时间。有哪些选项可以只保存日期而不是修改 cqlshrc 文件?
【解决方案2】:
select * from emp_schema.emp where doj='01-01-2010';

Carlos 是正确的,因为 Cassandra 要求日期格式为 yyy-mm-dd

但此查询仅在 doj 是您的分区键时才有效。如果您的 PRIMARY KEY 未设置为将 doj 指示为分区键,您无法查询。

我会专门设计您的表格以适合您的查询。此定义在doj 上进行分区,并在id 上进行集群以实现唯一性,因为多个emp[loyee] 可能具有相同的doj

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2023-03-24
    • 2011-09-10
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多