Cassandra中复合/复合主键的WHERE IN子句的语法是什么

cetgtptt  于 8个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(76)

Cassandra中复合/复合主键的WHERE IN子句的语法是什么?
我有一个Cassandra表,它的复合/复合主键如下所示:
PRIMARY KEY ((country, language), collectionid, instanceid)
如果我想返回具有相同国家和语言以及许多不同的集合ID和示例ID的许多行,那么这个表的WHERE IN子句应该是什么样子的?
会是这样的吗?还是说这行不通?有更好的办法吗?
WHERE ((country, language, collectionid, instanceid)) IN (("us", "en", "aaa", "111"),("us", "en", "bbb", "222"),("us", "en", "bbb", "333"))
或者这样会更有表现力?
WHERE country = "us" AND language="en" AND ((collectionid, instanceid)) IN (("aaa", "111"),("bbb", "222"),("bbb", "333"))

57hvy0tb

57hvy0tb1#

所以第一个WHERE子句不起作用。如果你尝试过,你可能会看到这个错误:
[Invalid query] message=“多列关系只能应用于聚类列,但已应用于:国家”
第二个WHERE子句不做一些调整就无法工作。基本上,使用单引号而不是双引号,并且不要在IN子句上使用双括号:

> SELECT * FROm collection_data
  WHERE country = 'us' AND language='en'
  AND (collectionid, instanceid) IN (('aaa', 111),('bbb', 222),('bbb', 333)) ;

 country | language | collectionid | instanceid  
---------+----------+--------------+------------
      us |       en |          aaa |        111
      us |       en |          bbb |        222
      us |       en |          bbb |        333

(3 rows)

这个查询可以工作,因为这里我们给了Cassandra一个特定的分区('en','us')来查看。

相关问题