cassandra:基于集合中一个特定值的过滤

1tuwyuhd  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(324)

我在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; 我希望它能过滤那些最喜欢的食物只有墨西哥菜的顾客,但现在它会返回每一个把墨西哥菜作为他们最喜欢食物之一的顾客的详细信息。如何过滤查询以返回只喜欢墨西哥食品的客户?

cqoc49vn

cqoc49vn1#

天真的方法:你需要使用 customer_favourites = {'Mexican'} ...
更好的方法-使用 FULL 关键字,然后使用 customer_favourites = {'Mexican'} .
最佳方法-使用 customer_favourites 作为分区键,并在其中搜索用户(列应为 frozen ). 这种方法的一个问题是数据倾斜,因为喜欢的食物数量相对较少,而且相当不平衡。
另一种方法-如果需要经常按非分区键搜索,请重新考虑使用cassandra。

相关问题