使用cassandra
和spark
以及datastax
' s spark-cassandra-connector
。
在spark-cassandra-connector中,它支持提供了这样的过滤示例:
sc.cassandraTable("test", "cars").select("id", "model").where("color = ?", "black").toArray.foreach(println)
基本上它会使用color
过滤black
列。但是,我可以根据范围过滤行吗?我希望过滤range
列long
类型,range
列在100000
和200000
之间? cql
是否支持这样的范围过滤器?
答案 0 :(得分:6)
CQL仅支持对群集列进行范围查询。范围查询可以在SQL中通过在同一字段上使用两个边界条件来表示,例如,在您将编写的spark-cassandra-connector中:
.where("my_long >= ? and my_long < ?", 1L, 100L)
只要&#34; my_long&#34; column是第一个聚类列。聚类列是在主键中声明分区列之后的列。
例如,如果主键声明如下,则可以在my_long列上运行范围查询:
如您所见,在上述所有情况中,my_long都遵循主键中分区键的声明。 如果列属于聚类列但它不是第一列,则必须为所有前面的列提供相等条件。 例如:
注意:spark-cassandra-connector默认添加条款&#34; ALLOW FILTERING&#34;在所有查询中。如果您尝试在cqlsh中运行上面的示例,则必须手动指定该子句。