【问题标题】:Using MATERIALIZED VIEW in Cassandra gives error在 Cassandra 中使用 MATERIALIZED VIEW 会出错
【发布时间】:2017-11-08 15:24:34
【问题描述】:

我有下表。

CREATE TABLE test_x (id text PRIMARY KEY, type frozen<mycustomtype>); 

mycustomtype 定义如下,

CREATE TABLE mycustomtype (
   id uuid PRIMARY KEY,
   name text
 )

我已经为基于 mycustometype 提交的查询创建了以下具体化视图。

CREATE MATERIALIZED VIEW test_x_by_mycustomtype_name AS
   SELECT id, type
   FROM test_x
   WHERE type IS NOT NULL
   PRIMARY KEY (id, type)
   WITH CLUSTERING ORDER BY (type ASC)

根据以上观点,我希望执行以下查询。

select id from test_x_by_mycustomtype_name where type =
{id: a3e64f8f-bd44-4f28-b8d9-6938726e34d4,  name: 'Sample'};

但是查询失败,说我需要使用“允许过滤”。我创建了不使用 ALLOW FILTERING 的视图。为什么这里会出现这个错误,因为我使用了视图的主键部分?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    在您看来,type 列仍然是集群键。因此,应使用 ALLOW FILTER。您可以按以下方式更改视图并重试

    创建实体化视图 test_x_by_mycustomtype_name_2 AS 选择 ID,输入 来自 test_x WHERE 类型不为 NULL 主键(类型,id) 具有聚类顺序(id ASC);
    cqlsh:test> select id from test_x_by_mycustomtype_name_2 where type = {id: a3e64f8f-bd44-4f28-b8d9-6938726e34d4,  name: 'Sample'};
    
    id
    ----
    

    【讨论】:

      【解决方案2】:

      改变物化视图的主键顺序

      CREATE MATERIALIZED VIEW test_x_by_mycustomtype_name AS
         SELECT id, type
         FROM test_x
         WHERE type IS NOT NULL
         PRIMARY KEY (type, id)
         WITH CLUSTERING ORDER BY (type ASC);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-18
        • 2021-10-25
        • 1970-01-01
        • 2017-01-06
        • 2022-01-18
        • 2020-01-03
        • 2015-01-04
        • 1970-01-01
        相关资源
        最近更新 更多