【问题标题】:Materialised view error in CassandraCassandra中的物化视图错误
【发布时间】:2018-07-04 14:50:23
【问题描述】:

我是 Cassandra 的新手,我正在尝试创建一个表和物化视图。但它不起作用。

我的查询是:

-- 所有订单

create table all_orders (
    id uuid,
    order_number bigint,
    country text,
    store_number bigint,
    supplier_number bigint,
    flow_type int,
    planned_delivery_date timestamp,
    locked boolean,
    primary key ( order_number,store_number,supplier_number,planned_delivery_date ));

--orders_by_date

CREATE MATERIALIZED VIEW orders_by_date AS 
    SELECT 
        id,
        order_number,
        country,
        store_number,
        supplier_number,
        flow_type,
        planned_delivery_date,
        locked,
    FROM all_orders
    WHERE planned_delivery_date IS NOT NULL AND order_number IS NOT NULL 
    PRIMARY KEY ( planned_delivery_date )
    WITH CLUSTERING ORDER BY (store_number,supplier_number);

我遇到了这样的异常:

SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query]
message="line 1:7 no viable alternative at input 'MATERIALIZED' ([CREATE] MATERI
ALIZED...)">

【问题讨论】:

  • Cassandra 版本?...同样使用 MV 的 PRIMARY KEY,一个交货日期将只有一条记录...如果您使用集群订单,则应该是 PRIMARY KEY ( planned_delivery_date, store_number,supplier_number)
  • 关于乞讨的提醒,来自较早的问题:专业发布提示:我注意到您添加了很多闲聊/恳求材料(我需要帮助,请帮助我,有人好心吗?帮助等)。您可能会发现这对以英语为母语的人来说很烦人,因此实际上并不鼓励人们提供帮助;无论如何,由于您将其添加到所有问题中,因此对于喜欢修剪这类事情的志愿编辑来说,这是更多的工作。谢谢你,如果你以后能减少它。
  • 让我们退后一步 :) 物化视图已经回到实验模式,这意味着不推荐使用它们。我的建议?找到一种不同的方式来做你想做的事。 :)

标签: cassandra nosql cql cql3


【解决方案1】:

Cassandra 中的物化视图解决了不必维护额外表以通过不同分区键进行查询的用例。但有以下限制

  • 将物化视图中的所有基表主键用作主键。
  • (可选)将基表中的一个非 PRIMARY KEY 列添加到 物化视图的主键。
  • 不支持将静态列作为主键。

更多文档参考here

因此,在您添加物化视图的情况下,正确的语法应该是

CREATE MATERIALIZED VIEW orders_by_date AS 
    SELECT  id, 
            order_number, 
            country, 
            store_number, 
            supplier_number, 
            flow_type, 
            planned_delivery_date, 
            locked
            FROM all_orders
            WHERE planned_delivery_date IS NOT NULL AND order_number IS NOT NULL AND store_number IS NOT NULL AND supplier_number IS NOT NULL
            PRIMARY KEY ( planned_delivery_date, store_number, supplier_number, order_number );

这里的planned_delivery_date 是分区键,行按store_number、supplier_number、order_number 排序(本质上是集群列)。所以这里没有强制要求添加“CLUSTERING ORDER BY”子句。

【讨论】:

  • @sun 对提供的解决方案有任何疑问或 cmets?否则记得回答/赞成答案
  • 要让问题作者看到您的消息,您需要在问题下方发布 - 我认为他们不会在答案 cmets 上收到 ping,除非他们已经编辑了您的答案或在其下发表了评论。
  • @dilsingi 我认为您提出的解决方案无法修复该错误。你可能想用类似的问题检查我的问题stackoverflow.com/questions/56136502/…
猜你喜欢
  • 2017-11-23
  • 2023-03-26
  • 1970-01-01
  • 2019-03-03
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多