
[英]Cassandra: Error: code=2200 [Invalid query] message="PRIMARY KEY column cannot be restricted as preceding column
[英]Cassandra error code=2200 [invalid query] message=“unknown column referenced in primary key for materialized view 'op'”
我是 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 上运行它(在SELECT
子句中没有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);
视图上的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, customerno, operatorno
...
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.