Cassandra CQL中的聚合查询

14

我们目前正在评估使用Cassandra作为分析应用程序的数据存储。计划是将原始数据倒入Cassandra中,然后主要运行聚合查询。看到CQL时,它似乎不支持一些传统的SQL运算符,例如:

  • 典型的聚合函数,如平均值、总和、Count-Distinct等
  • Groupby-having运算符

我在文档中没有找到任何有助于实现上述操作的内容。还检查了是否有提供此类功能作为扩展的钩子。比如像Mongodb中的数据库Map-Reduce或关系型数据库中的用户定义函数。

人们确实谈论过付费的Datastax Enterprise Edition,但这也不是通过普通的Cassandra实现的,而是通过单独的组件(如Hadoop-Hive-Pig-Hadoop等)实现的。或者建议在倒入数据到数据库之前进行所需的预聚合,因为Cassandra的写入速度很快。

对于我们需要的基本功能来说,这看起来有点繁琐。我是否忽略了某些基本的东西?

非常感谢您的帮助。


很好的问题,我也有同样的困扰。目前我们需要从关系型数据库中提取一个表格并将其放在另一个地方进行聚合和分析。不过我想知道哪种数据库最适合这个任务。 - Adelin
为什么不使用Mongo 3.0或更新版本来进行分析用途? - viren
7个回答

3

Cassandra中提供了聚合功能,作为CASSANDRA-4914的一部分,该功能在2.2.0-rc1版本中可用。


2

看一下这个

Native aggregates

Count

The count function can be used to count the rows returned by a query. Example:

SELECT COUNT (*) FROM plays;
SELECT COUNT (1) FROM plays;

It also can be used to count the non null value of a given column:

SELECT COUNT (scores) FROM plays;

Max and Min

The max and min functions can be used to compute the maximum and the minimum value returned by a query for a given column. For instance:

SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake';

Sum

The sum function can be used to sum up all the values returned by a query for a given column. For instance:

SELECT SUM (players) FROM plays;

Avg

The avg function can be used to compute the average of all the values returned by a query for a given column. For instance:

SELECT AVG (players) FROM plays;

您还可以创建自己的聚合函数,有关聚合函数的更多文档,请参见:http://cassandra.apache.org/doc/latest/cql/functions.html?highlight=aggregate


2
在一个特定的应用程序中,我们使用Cassandra来提高写入速度,然后使应用程序将数据压缩成更加压缩和稍微聚合的摘要形式。然后我们运行一个小时作业将摘要形式复制到Postgres表格中。这种方法并不十分优雅,但是它很简单,这意味着我们可以运行临时分析查询,而不必使主数据进入路径复杂化或在CQL应用程序中构建专门的聚合。

1
根据您的数据性质,如果需要对时间序列等数据执行聚合操作,则应考虑使用Kdb+。
我也在评估Cassandra用于存储时序遥测数据。我认为这是完美的匹配。然而,我发现它没有聚合函数。也许可以通过Pig和Hive解决此问题。但是,如果存在将数据摄取、存储和分析结合到单个语言中的解决方案,为什么不考虑呢?

MongoDB可能是一个不错的使用案例选择。您能否解释一下为什么您尝试过它呢? - viren

1
我认为Cassandra是一个存储引擎,解决了分布和可用性的问题,同时保持了规模和性能。当然,这样做的代价是灵活性和功能性。在数据库世界中,功能和性能之间总是存在权衡。
话虽如此,Cassandra与Spark等第三方软件非常兼容。Spark可能对您的使用情况非常有帮助。有一个开源连接器https://github.com/datastax/spark-cassandra-connector,可以帮助Spark智能地查找并运行Cassandra数据分析。
SparkSQL允许您运行SELECT sum以及大多数兼容Hive的查询。

1

这只是一个建议,就像我们在自己的案例中所做的那样。要在Cassandra数据库上进行聚合,您需要使用类似PIG或HIVE的语言,这些语言会内部生成Map-Reduce代码,对于群集中的大量数据表现非常好。为此,您需要设置Hadoop环境。处理后,您可以将处理过的数据写入Cassandra数据库或通过Sqoop写入MySQL数据库。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接