当所有聚簇列都不可用时在 cql 中读取查询
Read queries in cql when all clustering columns are not available
在 cql 中,当我们编写读取查询时,我们需要按照主键定义中提到的相同顺序提供列,并且所有列都必须存在。但是如果我们没有可用于某些聚类列的值,如何编写查询。
例如,如果 table 的主键定义为主键((州)、城市、名称),其中包含用户的记录,其中用户的州、城市和名称作为主键的一部分,则如何编写查询以查找来自某个州的具有给定名称的所有用户,而不管他们所在的城市?
像
Select * from USERS where state ='....', name='....';
不行。
这里有两个选择。
在 PRIMARY KEY ((state),name)
上键入的原始 table 旁边创建一个查询 table。
对上述查询调用 ALLOW FILTERING
指令,该指令仅过滤 state
和 name
。
虽然通常不鼓励使用 ALLOW FILTERING
(并且有充分的理由),但在 this 案例中并没有那么糟糕。通过指定 state
,您已赋予查询定位包含数据的节点的能力。是的,您仍然会以一种非性能方式“过滤”数据,但至少它不会跨多个节点。
在 cql 中,当我们编写读取查询时,我们需要按照主键定义中提到的相同顺序提供列,并且所有列都必须存在。但是如果我们没有可用于某些聚类列的值,如何编写查询。
例如,如果 table 的主键定义为主键((州)、城市、名称),其中包含用户的记录,其中用户的州、城市和名称作为主键的一部分,则如何编写查询以查找来自某个州的具有给定名称的所有用户,而不管他们所在的城市? 像
Select * from USERS where state ='....', name='....';
不行。
这里有两个选择。
在
PRIMARY KEY ((state),name)
上键入的原始 table 旁边创建一个查询 table。对上述查询调用
ALLOW FILTERING
指令,该指令仅过滤state
和name
。
虽然通常不鼓励使用 ALLOW FILTERING
(并且有充分的理由),但在 this 案例中并没有那么糟糕。通过指定 state
,您已赋予查询定位包含数据的节点的能力。是的,您仍然会以一种非性能方式“过滤”数据,但至少它不会跨多个节点。