我正在尝试使用Datastax发布的新连接器,通过Spark对Cassandra中存储的时间序列数据进行分析。
在我的模式中,分区键是计量器ID,我希望只对特定系列运行Spark操作,因此需要按计量器ID进行过滤。
然后我想运行这样的查询:Select * from timeseries where series_id = X
我尝试通过以下方式实现:
JavaRDD<CassandraRow> rdd = sc.cassandraTable("test", "timeseries").select(columns).where("series_id = ?",ids).toJavaRDD();
执行此代码时,生成的查询语句如下:
SELECT "series_id", "timestamp", "value" FROM "timeseries" WHERE token("series_id") > 1059678427073559546 AND token("series_id") <= 1337476147328479245 AND series_id = ? ALLOW FILTERING
我的分区键自动添加了一个子句(token("series_id") > X AND token("series_id") <=Y),然后我的内容被附加在其后。很明显这样是行不通的,我会收到一个错误信息:"如果包含相等关系,则 series_id 不能被限制超过一个关系"。
有没有办法摆脱自动添加的子句?我有什么遗漏的地方吗?
提前感谢您的回答。