使用in运算符在cassandra cql表中删除

使用in运算符在cassandra cql表中删除,cassandra,cql,Cassandra,Cql,我有一个具有以下模式的cql表 CREATE TABLE temp_date_time_wise ( date text, timeuid timeuuid, temperature text PRIMARY KEY (date, timeuid) ) 通过下面的链接,我了解了使用IN operator的可行性 现在,当我尝试对集群键使用IN操作符执行删除操作时,如下所示 delete from temp_date_time_wise where date in ('2

我有一个具有以下模式的cql表

  CREATE TABLE temp_date_time_wise (
  date text,
  timeuid timeuuid,
  temperature text
  PRIMARY KEY (date, timeuid)
)
通过下面的链接,我了解了使用IN operator的可行性 现在,当我尝试对集群键使用IN操作符执行删除操作时,如下所示

  delete from temp_date_time_wise where date in ('2014-11-17 00:00:00.0') and timeuid in (964966d0-6e1c-11e4-8362-5c260a5fc28f);
我得到以下错误

Bad Request: Invalid operator IN for PRIMARY KEY part timeuid

有人能告诉我执行查询时出错的原因吗?

这是因为中的
操作符只对主键的最后一部分或群集键的最后一部分起作用。我以前以为“元组表示法”会起作用,但它只适用于集群列。也就是说,在
中使用
并结合使用
=
应该可以在以下任一关键列上使用:

aploetz@cqlsh:stackoverflow> SELECT * FROM temp_date_time_wise 
WHERE date = '2014-11-17 00:00:00.0' 
AND timeuid IN (964966d0-6e1c-11e4-8362-5c260a5fc28f);

 date                  | timeuid                              | temperature
-----------------------+--------------------------------------+-------------
 2014-11-17 00:00:00.0 | 964966d0-6e1c-11e4-8362-5c260a5fc28f |         34C

(1 rows)

不过,我应该警告你,即使它真的起作用,这种说法也可能不会很好地发挥作用。您应通读本税务文件,尤其是标题为:

关于何时不使用索引的建议适用于WHERE子句中的使用。在大多数情况下,不建议在WHERE子句中使用IN。在中使用会降低性能,因为通常必须查询多个节点


也可以考虑使用不同的列名。保留的单词(如timeuuid)和非特定的单词(如“date”)可能会导致问题和混淆(特别是当“date”确实不是日期类型时)。

我将补充另一个解释,解释为什么通常使用
DELETE
语句不是一个好主意。正确。在Cassandra中,频繁删除被认为是一种反模式。
aploetz@cqlsh:stackoverflow> SELECT * FROM temp_date_time_wise
WHERE date IN ('2014-11-17 00:00:00.0') 
AND  timeuid = 964966d0-6e1c-11e4-8362-5c260a5fc28f;

 date                  | timeuid                              | temperature
-----------------------+--------------------------------------+-------------
 2014-11-17 00:00:00.0 | 964966d0-6e1c-11e4-8362-5c260a5fc28f |         34C

(1 rows)