从包含二级索引的表中删除列时,出现以下错误。我正在使用ScyllaDB版本3.0.4。
[无效查询] message =“无法在具有实例化视图的基表Warehouse.myuser上删除列名”
下面是示例命令
create table myuser (id int primary key, name text, email text);
create index on myuser(email);
alter table myuser drop name;
我可以在Apache Cassandra中成功运行以上语句。
答案 0 :(得分:6)
Scylla中的默认二级索引是全局的,并在实例化视图之上实现(与Apache Cassandra的本地索引实现相对),这为它们提供了新的可能性,但同时也增加了某些限制。从具有实例化视图的表中删除列是一项复杂的操作,尤其是如果目标列是由视图之一选择的,或者目标列的活跃度会影响视图行的活跃度。为了避免这些问题,当在表上附加了实例化视图时,无条件地删除列是不可能的。您所看到的错误是这种错误的结合,也是Scylla的索引在下面使用实例化视图为每一行存储相应基键的事实。
显而易见的解决方法是先删除索引,然后删除列并重新创建索引,但这当然会花费时间和资源。
但是,在某些情况下,即使具有实体化视图,也可以将其从基础表中删除,尤其是如果未在视图中选择该列并且其活动度对视图行没有任何影响。作为参考,我创建了一个问题,要求在我们的错误跟踪器中实现:https://github.com/scylladb/scylla/issues/4448