【问题标题】:Deleting in cassandra cql table using IN operator使用 IN 运算符在 cassandra cql 表中删除
【发布时间】:2015-01-22 00:46:01
【问题描述】:

我有一个具有以下架构的 cql 表

  CREATE TABLE temp_date_time_wise (
  date text,
  timeuid timeuuid,
  temperature text
  PRIMARY KEY (date, timeuid)
)

我通过以下链接了解了使用 IN 运算符的可行性 http://mechanics.flite.com/blog/2014/01/08/the-in-operator-in-cassandra-cql/ 现在,当我尝试使用 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

谁能告诉我执行查询时出错的原因?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    这是因为IN 运算符仅适用于主键的最后一部分,或者集群键的最后一部分。我之前认为“元组表示法”会起作用,但是according to this doc,它只适用于集群列。话虽这么说,使用IN 结合= 应该适用于任一键列:

    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)
    

    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)
    

    不过,我应该警告您,即使它确实有效,该语句也可能不会执行良好。您应该通读此 DataStax 文档,尤其是标题为 When Not To Use IN 的部分:

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

    另外,请考虑使用不同的列名。保留字如 timeuuid 和非特定字如“日期”可能会导致问题和混乱(尤其是当“日期”确实不是日期类型之一时)。

    【讨论】:

    • 我会添加您的另一个answer,并解释为什么通常使用DELETE 语句不是一个好主意。
    • 正确。在 Cassandra 中,频繁删除被认为是一种反模式。
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2018-02-21
    • 1970-01-01
    • 2020-10-05
    • 2018-09-13
    相关资源
    最近更新 更多