我在cassandra中有一个数据表,其中一列是: customer_favourites
,每个值都是set类型,它包含每个顾客最喜欢的食物的详细信息。例如,一个客户可能 {'Mexican', 'Italian', 'Indian'}
另一个顾客可能 {'Mexican', 'French'}
另一个可能 {'Mexican'}
.
我有以下代码: SELECT customer_id, customer_fname, customer_lname FROM customers WHERE customer_favourites CONTAINS ‘Mexican’ ALLOW FILTERING;
我希望它能过滤那些最喜欢的食物只有墨西哥菜的顾客,但现在它会返回每一个把墨西哥菜作为他们最喜欢食物之一的顾客的详细信息。如何过滤查询以返回只喜欢墨西哥食品的客户?
1条答案
按热度按时间cqoc49vn1#
天真的方法:你需要使用
customer_favourites = {'Mexican'}
...更好的方法-使用
FULL
关键字,然后使用customer_favourites = {'Mexican'}
.最佳方法-使用
customer_favourites
作为分区键,并在其中搜索用户(列应为frozen
). 这种方法的一个问题是数据倾斜,因为喜欢的食物数量相对较少,而且相当不平衡。另一种方法-如果需要经常按非分区键搜索,请重新考虑使用cassandra。