【问题标题】:How do I group by a field in a certain time range in Cassandra?如何在 Cassandra 的某个时间范围内按字段分组?
【发布时间】: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 中是不可能的吗?还是我遗漏了一些明显的东西?

【问题讨论】:

    标签: database cassandra


    【解决方案1】:

    TLDR:这是不可能的。

    长答案:
    根据 Cassandra JIRA, Cassandra 目前没有在任意列上实现 group by。按多列分组时,只能按主键列在主键中声明的顺序,从第一个开始分组。

    唯一允许的例外是,如果您使用相等限制限制了前 n 列。请注意,使用“=”限制列是选择一个组,因此该列中没有可分组的内容,这就是 Cassandra 允许这样做的原因。然后,您可以按剩余列按顺序从下一列开始分组(不能跳过中间的列)。

    因此,要按列分组,所有前面的主键列都必须受“=”限制或在 group by 子句中。

    上述范围查询失败,因为样本列受范围限制,因此仍然有多个组,但不在 group by 子句中。 LIKE 和 IN 限制在这种情况下也不起作用。

    我认为您可以尝试的最佳方法是将 timeuuid 包含在 group by 中,然后在应用程序中进行聚合。

    SELECT browsername,id, count(*) from clicks_by_browser
        WHERE CompanyName='example' and id>=minTimeuuid(...) 
        GROUP BY id,browsername;
    

    【讨论】:

    • 非常感谢。我担心我遗漏了一些明显的东西,但最终得出的结论是,事实上,目前不支持它。我会按照您的建议尝试在应用程序级别处理它。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多