我创建了2个键空间:

CREATE KEYSPACE test1 WITH replication = {'class': 'SimpleStrategy', 'replicatio                                                                                                             n_factor': '3'}

CREATE KEYSPACE test2 WITH replication = {'class': 'SimpleStrategy', 'replicatio                                                                                                             n_factor': '3'}


在test1上创建表用户

CREATE TABLE test1.users (
  user_name varchar ,
  password varchar,
  id varchar,
  primary key(user_name,id)
);


在test2上创建实例化视图

CREATE MATERIALIZED VIEW test2.user_by_id AS
SELECT * FROM test1.users where id is not null and user_name is not null
PRIMARY KEY (id,user_name);


得到错误:


InvalidRequest:来自服务器的错误:代码= 2200 [无效查询]
message =“未配置的表用户”




CREATE MATERIALIZED VIEW test1.user_by_id AS
       SELECT * FROM test1.users where id is not null and user_name is not null
       PRIMARY KEY (id,user_name);


效果不错。

根据Cassandra文档,这应该起作用。

https://docs.datastax.com/en/cql/3.3/cql/cql_reference/refCreateMV.html

“要在除当前键空间以外的键空间中创建实例化视图,请将键空间名称放在实例化视图名称的前面,后跟一个句点”

在Cassandra 3.0和3.9-相同的问题上进行了检查。

我使用cqlsh从cassandra节点连接。

可从test2访问test1.users:

cqlsh:test2> select * from test1.users;

 user_name | id | password
-----------+----+----------


(0行)

我会错过什么吗?

谢谢

阿隆

最佳答案

该表和实体化视图必须在同一键空间中。
您误解了文档。


要在当前键空间以外的键空间中创建实例化视图,请将键空间名称放在实例化视图名称的前面,后跟一个句点。


如果当前的键空间与表的键空间不同,则必须将表的键空间名称放在实例化视图名称的前面,后跟一个句点。
物化视图将在表的键空间中创建

关于cassandra - 在不同的键空间上创建Cassandra物化 View 失败-未配置表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40765237/

10-10 17:14