Cassandra 聚合到 Map

Posted

技术标签:

【中文标题】Cassandra 聚合到 Map【英文标题】:Cassandra aggregate to Map 【发布时间】:2017-07-19 12:43:12 【问题描述】:

我是 cassandra 的新手,过去几个月我主要使用 Hive。最近我开始了一个项目,我需要用 cassandra 代替我在 hive 中做的一些事情。

基本上,我正在尝试找到一种方法,将多行聚合到一个查询中的单个地图中。

在 hive 中,我只是使用“地图”聚合进行分组。 cassandra 中是否存在做类似事情的方法?

这是一个工作蜂巢查询的示例,它完成了我想要做的任务:

select 
      map(
        "quantity", count(caseid)
        , "title" ,casesubcat
        , "id" , casesubcatid
        , "category", named_struct("id",casecatid,'title',casecat) 
      ) as casedata
from caselist
group by named_struct("id",casecatid,'title',casecat) , casesubcat, casesubcatid

【问题讨论】:

【参考方案1】:

将查询结果映射到 Map(或您选择的其他类型/结构/类)是客户端应用程序的责任,通常是一项微不足道的任务(但您没有指定此映射将在什么上下文中使用) .

这里的实际问题是关于 Cassandra 中的 GROUP BY。开箱即用不支持此功能。您可以查看 Cassandra 的 standard aggregate functions 或尝试创建 user defined function,但 Cassandra Way 会提前了解您的查询,相应地设计您的架构,在写入阶段进行繁重的工作并在之后进行简单的查询。因此,通常可以通过使用专用的counter tables 来实现分组/聚合。

另一种选择是在附加层(例如 Apache Spark)中进行数据处理。您是否考虑过在 Cassandra 之上使用 Hive?

【讨论】:

以上是关于Cassandra 聚合到 Map的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Cassandra 内部不支持聚合?

Spark 的 Cassandra 数据聚合

这个带有非聚合列的 cassandra 查询的定义行为是啥?

Cassandra 是不是支持聚合功能或 Map Reduce 等任何其他功能?

如何从java获取聚合Cassandra行数据

如何将数据从 Cassandra 导出到 mongodb?