我有一个带有以下内容的表(已删除其他字段)
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}} 以及尝试从查询中抽出一天时间的其他各种方式。
答案 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天的日期,但这取决于您使用的语言。