【发布时间】:2019-07-18 11:19:26
【问题描述】:
我有一个包含大约 15 个字段的大型 Cassandra 表,我想创建许多物化视图来支持我的所有查询。基表上的主键是 (CompanyName, ctime),其中 ctime 是 timeuuid。该表记录了在某个时间戳对某个公司网站的每次点击。
例如,我的一个查询包括搜索特定时间范围内(最多一年)最常用的浏览器。
原来如此
CREATE MATERIALIZED VIEW clicks_by_browser
AS SELECT CompanyName, ctime, browsername
FROM companyclicks
WHERE CompanyName is not null AND ctime is not null AND browsername is not null
PRIMARY KEY(CompanyName, ctime, browsername)
但这不起作用。当我进行查询时:
SELECT browsername, count(*) from clicks_by_browser
WHERE CompanyName='example' and id>=minTimeuuid(...)
GROUP BY browsername;
Cassandra 拒绝它,因为“Group by 仅支持按照主键中声明的顺序排列的列组”。所以问题是我在主键中的 browsername 之前声明了 ctime。
所以我尝试将它们的顺序颠倒为聚类列,
CREATE MATERIALIZED VIEW clicks_by_browser
AS SELECT CompanyName, ctime, browsername
FROM companyclicks
WHERE CompanyName is not null AND ctime is not null AND browsername is not null
PRIMARY KEY(CompanyName, browsername, ctime)
但现在 Cassandra 拒绝了相同的查询,因为在 WHERE 子句中不能限制 ctime,因为前面的列 browsername 没有限制。
那么这样的查询目前在 Cassandra 中是不可能的吗?还是我遗漏了一些明显的东西?
【问题讨论】: