【发布时间】:2016-03-14 20:00:23
【问题描述】:
假设我的主键是timestamp。
我想通过时间戳范围限制查询。
即使我使用了token(),我似乎也无法让它发挥作用。我也无法在分区键上创建二级索引。
这应该怎么做?
【问题讨论】:
-
下次请先花点时间搜索一下 SO,你通常会找到答案stackoverflow.com/questions/13700288/…
假设我的主键是timestamp。
我想通过时间戳范围限制查询。
即使我使用了token(),我似乎也无法让它发挥作用。我也无法在分区键上创建二级索引。
这应该怎么做?
【问题讨论】:
Cassandra 不允许对分区键进行范围查询。
处理此问题的一种方法是更改您的架构,以便您的时间戳值将是一个集群列。为此,您需要引入一个哨兵列作为分区键。请参阅此问题以获得更详细的答案:Range Queries in Cassandra (CQL 3.0)
另一种方法是让 Spark 进行过滤。对主键的范围查询应该在 Spark SQL 中工作。它们根本不会被推送到 Cassandra,Spark 会获取所有数据并在 Spark 端过滤它们。
【讨论】:
where 子句,即使它不会被下推?
token() 对分区键进行范围查询吗?这就是 Spark 在后台所做的对吧?