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 查询的定义行为是啥?