Materialised view error in Cassandra

徘徊边缘 提交于 2019-12-11 14:52:31

问题


I am new to Cassandra, I am trying to create a table and materialized view. but it not working.

My queries are:

-- all_orders

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);

I am getting an exception like this:

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

回答1:


Materialized Views in Cassandra solves the use case of not having to maintain additional table(s) for querying by different partition keys. But comes with following restrictions

  • Use all base table primary keys in the materialized view as primary keys.
  • Optionally, add one non-PRIMARY KEY column from the base table to the materialized view's PRIMARY KEY.
  • Static columns are not supported as a PRIMARY KEY.

More documentation reference here.

So the correct syntax in your case of adding the materialized view would be

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 );

Here planned_delivery_date is the partition key and the rows are ordered by store_number, supplier_number, order_number (essentially the clustering columns). So there isn't a mandatory requirement to add "CLUSTERING ORDER BY" clause here.



来源:https://stackoverflow.com/questions/48441454/materialised-view-error-in-cassandra

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!