Mic*_*cka 5 cql cassandra cql3 cqlsh cassandra-3.0
我的目标是从现在开始删除固定的时间()。所以我总是能得到最后五分钟,或者最后五个小时。
我怎样才能实现它?
cassandra 的文档说:
可以在时间戳或日期中添加 (+) 或减去 (-) 持续时间以创建新的时间戳或日期。例如:
SELECT * FROM myTable WHERE t = '2017-01-01' - 2d
将选择 2016 年最后 2 天内值为 t 的所有记录。
里面cqlsh,show version;给了我:
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Run Code Online (Sandbox Code Playgroud)
我用下表进行测试:
cqlsh:> CREATE TABLE t (
... ts timestamp,
... PRIMARY KEY (ts)
... )
... WITH compression = {'class': 'LZ4Compressor'}
... AND gc_grace_seconds = 60;
Run Code Online (Sandbox Code Playgroud)
以下查询有效:
SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()));
Run Code Online (Sandbox Code Playgroud)
以下情况则不然:
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now() - 1d));
SyntaxException: line 1:57 mismatched input '-' expecting ')' (...ts <= toTimestamp(now() [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()) - 1d);
SyntaxException: line 1:58 mismatched input '-' expecting ')' (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()) - 1m);
SyntaxException: line 1:58 mismatched input '-' expecting ')' (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE ts <= toTimestamp(now()) - 1m;
SyntaxException: line 1:57 mismatched input '-' expecting EOF (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE ts = toTimestamp(now()) - 1m;
SyntaxException: line 1:56 mismatched input '-' expecting EOF (... = toTimestamp(now()) [-]...)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,错误始终与-尝试减去持续时间有关。(顺便说一句,结果与 相同+)
我做错了什么?可能有办法实现它,但我无法弄清楚!
作为记录,正如 @Ashraful-Islam 所建议的,我的解决方案是创建一个 UDF 来完成这项工作。见下文:
CREATE FUNCTION IF NOT EXISTS timeAgo(minutes int)
CALLED ON NULL INPUT
RETURNS timestamp
LANGUAGE java AS '
long now = System.currentTimeMillis();
if (minutes == null)
return new Date(now);
return new Date(now - (minutes.intValue() * 60 * 1000));
';
-- So I can do
SELECT timeAgo(60) FROM t;
Run Code Online (Sandbox Code Playgroud)
Cassandra 4.0 中引入的算术运算符
- 添加对算术运算符的支持 (CASSANDRA-11935)
来源:https ://github.com/apache/cassandra/blob/trunk/CHANGES.txt#L124
已编辑
如果您的 cassandra 版本低于 4.0,那么您必须从应用程序层执行此操作或创建用户定义函数 (UDF)。检查下面的链接
| 归档时间: |
|
| 查看次数: |
3368 次 |
| 最近记录: |