检索过去24小时内的行

时间:2019-09-06 01:46:50

标签: cassandra cql

我有一个带有以下内容的表(已删除其他字段)

INSERT INTO request_audit (user_id, lookup_timestamp, request_body) VALUES (?, ?, toTimestamp(now()))

我用以下内容创建一条记录

SELECT * from request_audit WHERE user_id = '1234' AND lookup_timestamp > toTimestamp(now() - "1 day" )

我正在尝试检索过去24小时内的所有行,但时间戳有问题, 我尝试过

{{1}} 以及尝试从查询中抽出一天时间的其他各种方式。

2 个答案:

答案 0 :(得分:2)

Cassandra的日期操作支持非常有限。您需要一个自定义函数来进行日期数学计算。

从这里启发。 How to get Last 6 Month data comparing with timestamp column using cassandra query?

您可以编写UDF(用户定义的函数)进行日期操作。

CREATE FUNCTION dateAdd(date timestamp, day int)     
CALLED ON NULL INPUT     
RETURNS timestamp     
LANGUAGE java     
AS 
$$java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
c.add(java.util.Calendar.DAY_OF_MONTH, day);
return c.getTime();$$ ;

请记住,您必须在配置中启用UDF。 Cassandra.yml。希望有可能。

enable_user_defined_functions: true

完成此查询后,效果会很好。

SELECT * from request_audit WHERE user_id = '1234' AND lookup_timestamp > dateAdd(dateof(now()), -1)

答案 1 :(得分:0)

您无法直接通过CQL进行此操作,因为它不支持此类表达式。如果您是从cqlsh运行此查询,则可以尝试将所需日期替换为以下内容:

date --date='-1 day' '+%F %T%z'

并执行此查询。

如果要从程序中调用它,只需使用相应的日期/时间库来获取对应于-1天的日期,但这取决于您使用的语言。