3

从包含二级索引的表中删除列时,出现以下错误。我正在使用 ScyllaDB 3.0.4 版。

[无效查询] message="Cannot drop column name on base table warehouse.myuser with materialized views"

以下是示例命令

create table myuser (id int primary key, name text, email text);
create index on myuser(email);
alter table myuser drop name;

我可以在 Apache Cassandra 中成功运行上述语句。

4

1 回答 1

6

Scylla 中的默认二级索引是全局的,并在物化视图之上实现(与 Apache Cassandra 的本地索引实现相反),这为它们提供了新的可能性,但也增加了某些限制。从具有物化视图的表中删除列是一项复杂的操作,特别是如果目标列由其中一个视图选择,或者它的活跃度会影响视图行的活跃度。为了避免这些问题,当有物化视图附加到表时,无条件地删除列是不可能的。您看到的错误是这一点和 Scylla 的索引使用下面的物化视图来存储每一行​​的相应基本键这一事实的结合。

显而易见的解决方法是先删除索引,然后删除列并重新创建索引,但这当然需要时间和资源。

但是,在某些情况下,即使列具有物化视图,也可以允许从基表中删除列,特别是如果未在视图中选择列并且其活动性对视图行没有任何影响。作为参考,我创建了一个问题,要求在我们的错误跟踪器中实现它:https ://github.com/scylladb/scylla/issues/4448

于 2019-04-20T18:23:40.573 回答