在具有物化视图的 table 上放置列

Drop column(s) on a table that has a materialized view

当此 table 上有定义的实体化视图时,似乎无法从 table 中删除列。例如,假设我们有这个 table:

> 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);

然后我们更改用户 table 并添加一列:

> ALTER TABLE users ADD last_name text;

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

> 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 的价格是多少?

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

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

为现有 table w/data 创建 MV 时,它将启动构建过程以在后台填充 MV。

您可以查看状态-

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