我有一个用例,其中我需要编写一个脚本来清除cassandra数据库中的表,以获取超过90天的所有数据。 现在问题是DB具有以下格式的eventdate(时间戳):
2018-01-21 12:33:12+0000
从我的脚本中我无法获得确切的时间戳:如小时分钟和秒,除非我有查询没有获取此数据。
有人可以建议我如何从表中选择仅包含日期的数据:yyyy-mm-dd。
注意:eventdate是表的分区键。 此外,我目前正在使用python编写此脚本。
更新: 当我尝试使用令牌(eventdate)时:
SELECT * from solr_reports_table_v1 WHERE key1='test' and key2 = 'test' and key3='test' and token(eventdate) > '2018-01-20';
我收到以下错误:
InvalidRequest: code=2200 [Invalid query] message="Invalid STRING constant (2018-01-20) for "partition key token" of type bigint"
这是eventdate字段:
eventdate timestamp
答案 0 :(得分:1)
无法在分区键上指定范围过滤器。所以,不可能做像
这样的事情select * from mytable where eventdate > some_date_1 and eventdate < some_date_2
此外,简单地选择所有行并迭代它们将无法正常工作,因为当您收到异常时,您无法从您离开的位置继续。
即使您无法在分区键上指定范围过滤器,也可以使用CQL的token function指定范围过滤器:
SELECT eventdate FROM mytable WHERE token(eventdate) >= start_token AND token(eventdate ) < end_token;
每次迭代后,您应该将end_token+1
分配给start_token
并计算新的end_token
。您还可以通过将整个令牌范围分区并共享到同时运行的线程数来并行化。