在cql中,当我们编写读取查询时,我们需要按照主键定义中提到的顺序提供列,并且所有列都必须存在。但是,如果我们没有可用于某些集群列的值,该如何编写查询。
例如,如果主键被定义为一个表的主键((state),city,name),该表包含用户的记录,用户的state,city和name是主键的一部分,那么如何编写查询来从一个州中查找所有具有给定名称的用户,而不考虑他们的城市?类似的东西
Select * from USERS where state ='....', name='....';
不会起作用。
这里有两个选项。
-
在
PRIMARY KEY ((state),name)
上键控的原始表旁边创建一个查询表。 -
对以上查询调用
ALLOW FILTERING
指令,该指令仅对state
和name
进行筛选。
虽然通常不鼓励使用ALLOW FILTERING
(并且有充分的理由),但在这种情况下,情况并没有那么糟糕。通过指定state
,您为查询提供了定位包含数据的节点的能力。是的,你仍然是";过滤";以非性能的方式通过数据,但至少不会跨多个节点。