问题描述
我是 Cassandra 的新手,我正在尝试创建一个物化视图。但它不起作用。 下面是表和物化视图定义以及错误代码-
表格
CREATE TABLE my_keyspace.my_table (
customerno text,operatorname text,customername text,operatorno text,PRIMARY KEY (customerno));
物化视图
CREATE MATERIALIZED VIEW op
AS SELECT operatorname,operatorno
FROM my_keyspace.my_table
WHERE operatorname IS NOT NULL AND customerno IS NOT NULL
PRIMARY KEY (operatorname,customerno);
创建物化视图时的错误消息
invalidrequest: error from server: code=2200 [invalid query]
message="unkNown column customerno referenced in primary key
for materialized view 'op'"
customerno
是基表中的主键。
解决方法
该错误表明 customerno
也需要位于基表的 SELECT
子句中。这应该有效:
> CREATE MATERIALIZED VIEW op AS SELECT operatorname,operatorno,customerno
FROM stackoverflow.customer_table
WHERE operatorname IS NOT NULL AND customerno IS NOT NULL
PRIMARY KEY (operatorname,customerno);
,
为了补充 Aaron 的答案,您似乎运行的是旧版本的 Cassandra。
在 3.0+ 和 3.11 的更高版本中,基表的所有主键列都会自动包含在内,因此您的 CREATE
语句应该可以正常工作。
例如,如果我在 C* 3.0.10 上运行它(在 customerno
子句中没有 SELECT
):
CREATE MATERIALIZED VIEW op
AS SELECT operatorname,operatorno
FROM my_keyspace.my_table
WHERE operatorname IS NOT NULL AND customerno IS NOT NULL
PRIMARY KEY (operatorname,customerno);
视图上的 DESCRIBE
返回:
cqlsh> DESCRIBE MATERIALIZED VIEW my_keyspace.op;
CREATE MATERIALIZED VIEW my_keyspace.op AS
SELECT operatorname,customerno,operatorno
FROM my_keyspace.my_table
WHERE operatorname IS NOT NULL AND customerno IS NOT NULL
PRIMARY KEY (operatorname,customerno)
WITH CLUSTERING ORDER BY (customerno ASC)
...
自动包含 customerno
:
...
SELECT operatorname,operatorno
...
干杯!