【问题标题】:Cassandra - update all records by primary key, mismatched input errorCassandra - 按主键更新所有记录,输入不匹配错误
【发布时间】:2017-05-14 15:25:51
【问题描述】:

我最近开始使用 Cassandra,我了解 Cassandra 会阻止用户通过主键删除表中的所有记录。 因为您还需要提供所有集群密钥。

我尝试使用标准 sql,例如:

UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id IN (SELECT user_id FROM my_table WHERE COUNTRY = 'XXX');

我得到的错误是:

SyntaxException: line 1:113 mismatched input 'SELECT' expecting ')' (... 1 AND user_id IN ([SELECT]...)

请指教。

【问题讨论】:

  • 你的表架构是什么?

标签: cassandra


【解决方案1】:

您不能在 cassandra 中使用嵌套查询。

您必须使用两个单独的查询。

首先从mytable中选择所有user_id

SELECT user_id FROM mytable WHERE COUNTRY = 'XXX'

Second 对于前面步骤中找到的每个 user_id

UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id = 'XXX'

您可以使用executeAsync 执行第二个查询。

如果user_id是分区键,你也可以在查询中使用更新,但建议使用小尺寸user_id列表

 UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id in ('XXX', 'XXY', 'XXZ')

【讨论】:

  • 所以这意味着我需要保存第一个查询的结果,然后将其用于 UPDATE 查询。 'executeAsync' 有什么作用?
  • executeAsync 将以非阻塞方式执行查询。查看更多datastax.com/dev/blog/java-driver-async-queries
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 2021-03-11
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多