【问题标题】:how UPDATE rows in cassandra using only Partition Key?如何仅使用分区键更新 cassandra 中的行?
【发布时间】:2015-02-02 10:19:31
【问题描述】:

我的桌子是这样的

create table Notes(
    user_id varchar,
    real_time timestamp,
    insertion_time timeuuid,
    read boolean PRIMARY KEY (user_id,real_time,insertion_time)
);

create index read_index on Notes (read);

我想更新所有 user_id = 'xxx' 不必指定所有集群索引。

UPDATE Notes SET read = true where user_id = 'xxx'; // Says Error

错误:message="Missing required PRIMARY KEY part real_time

我尝试过创建二级索引,但主键上不允许这样做。

我该如何解决这个问题?

我选择 user_id 作为主键,因为我希望能够做到 select * from Notes where user_id = 'xxx' 应该是可能的。

【问题讨论】:

    标签: cassandra nosql cql cql3


    【解决方案1】:

    虽然这对于 RDBMS 和 SQL 来说可能是可能的,但对于 Cassandra 中的 cql 是不可能的。来自UPDATE 命令的DataStax 文档:

    每个更新语句都需要使用 WHERE 子句指定一组精确的主键。您需要在具有复合列和聚类列的表中指定所有键。

    您可能需要在 Python(或其他驱动程序之一)中快速编写一些东西来执行此类更新。

    【讨论】:

    • 虽然上述答案是正确的,但我认为值得一提的是,您可以将IN 子句用于主键的最后一列(即作者问题中的insertion_time)。根据您的用例,这有助于减少所需的 CQL 语句数量。
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2017-07-21
    • 2018-04-05
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多