【问题标题】:Cassandra : Using output of one query as input to another queryCassandra:使用一个查询的输出作为另一个查询的输入
【发布时间】:2017-08-05 16:22:29
【问题描述】:

我有两个表,一个是 users,另一个是 expired_users。

用户列-> id、name、age expired_users 列 -> id, name

我想执行以下查询。

从 id 所在的用户中删除(从 expired_users 中选择 id);

此查询适用于 SQL 相关数据库。我想在 cassandra 中找到解决此问题的方法。

PS:我不想在表格中添加任何额外的列。

【问题讨论】:

    标签: cassandra nosql


    【解决方案1】:

    在设计 cassandra 数据模型时,我们不能完全像 RDBMS 那样思考。 像这样设计--

    create table users (
    id int,
    name text,
    age int,
    expired boolean static,
    primary key (id,name)
    );
    

    将用户标记为过期 -- 只需再次插入同一行

    insert into users (id,name,age,expired) values (100,'xyz',80,true);
    

    您不必更新或删除该行,只需再次插入,之前的列值将被覆盖。

    【讨论】:

    • 这并不能解决我的目的。我无法更改现有的表结构。
    • @Bhanu Boppana 如果你添加有问题的表定义会更好。
    • 我已在问题的表格中添加了我的列。如果您需要更多信息,请告诉我。
    • 我认为您没有比 alter table 更好的选择,否则您必须从 expired_users 中选择每个用户并在应用程序级别删除用户中的条目。使用 cassandra,我们无法将表连接为数据库级别。此外,删除 rwo 将创建墓碑。
    【解决方案2】:

    您想要使用 join 作为删除语句的过滤器,这不是 Cassandra 模型的目的。

    AFAIK 无法使用 cql 执行此操作。如果您想在不更改架构的情况下执行此操作 - 以任何具有 Cassandra 驱动程序的语言运行外部脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2021-02-10
      • 2019-04-24
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多