【问题标题】:Cassandra error code=2200 [invalid query] message="unknown column referenced in primary key for materialized view 'op'"Cassandra 错误代码=2200 [invalid query] message="在物化视图'op'的主键中引用的未知列"
【发布时间】:2021-10-04 06:00:32
【问题描述】:

我是 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 是基表中的主键。

【问题讨论】:

    标签: cassandra materialized-views


    【解决方案1】:

    该错误表明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);
    

    【讨论】:

      【解决方案2】:

      为了补充 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
          ...
      

      干杯!

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2017-10-18
        • 2023-03-15
        • 2018-07-04
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 2021-01-15
        相关资源
        最近更新 更多