【问题标题】:Drop column(s) on a table that has a materialized view在具有物化视图的表上删除列
【发布时间】:2018-04-26 03:33:38
【问题描述】:

当该表上有已定义的物化视图时,似乎无法从表中删除列。例如,假设我们有这个表:

> CREATE TABLE healthera.users (
>   user_id timeuuid PRIMARY KEY,
>   address text,
>   birthday int,
>   forename text,
>   user_password text,
>   username text
> );

我们在下面定义物化视图:

> CREATE MATERIALIZED VIEW users_by_username AS
>   SELECT * FROM users
>   WHERE user_id IS NOT NULL AND username IS NOT NULL
>   PRIMARY KEY (username, user_id);

然后我们修改 users 表并添加一列:

> ALTER TABLE users ADD last_name text;

当我们尝试从用户表中删除此列或任何其他列时,我们会返回此错误:

> ALTER TABLE users DROP last_name ;
> InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot drop column last_name, depended on by materialized views (healthera.{users_by_username})"

> ALTER TABLE users DROP forename ;
> InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot drop column forename, depended on by materialized views (healthera.{users_by_username})"

这是预期的吗?我们应该如何处理?我们是否需要删除物化视图,删除列,然后再次重新创建物化视图?如果是,这对 cassandra 来说有多贵?

【问题讨论】:

    标签: cassandra datastax-enterprise datastax-startup


    【解决方案1】:

    您可以将列添加到 MV 的基表中,但您不能删除列,即使它不是 PK 的一部分。

    http://www.doanduyhai.com/blog/?p=1930

    为现有的包含数据的表创建 MV 时,它将启动构建过程以在后台填充 MV。

    你可以查看状态-

    SELECT * FROM system.views_builds_in_progress;
    SELECT * FROM system.built_views;
    

    【讨论】:

    • 感谢这篇博文,非常有帮助!所以解决方案是删除物化视图,从源表中删除列并重新创建物化视图?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2011-10-29
    • 2019-11-30
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多