【问题标题】:Aggregation queries in Cassandra CQLCassandra CQL 中的聚合查询
【发布时间】:2017-09-14 15:23:02
【问题描述】:

我们目前正在评估 Cassandra 作为分析应用程序的数据存储。计划是将原始数据转储到 Cassandra 中,然后主要对其运行聚合查询。看CQL,好像不支持一些传统的SQL操作符,比如:

  • 典型的聚合函数,如平均、求和、计数-Distinct 等。
  • Groupby-having 运算符

我没有在文档中找到任何可以帮助实现上述目标的内容。还检查是否有任何钩子可以提供扩展等功能。比如说在 Mongodb 中的数据库 map-reduce 中,或者在关系数据库中的用户定义函数中。

人们确实在谈论付费的 Datastax 企业版,这也不是通过普通的 Cassandra 实现的,而是通过 Hadoop-Hive-Pig-Hadoop 等单独的组件实现的。或者有关于在转储数据之前进行所需的预聚合的建议到数据库,因为 Cassandra 写入速度很快。

看起来开销太大了,至少对于我们需要的基本东西来说。我在这里错过了一些基本的东西吗?

非常感谢您对此的帮助。

【问题讨论】:

  • 很好的问题,因为我有同样的问题,目前我们需要从关系数据库中提取一个表并将其放在另一个地方进行一些聚合和分析。但是我想知道哪种数据库最适合这个。
  • 为什么不使用 Mongo 3.0 或更新的分析用例。

标签: cassandra cql


【解决方案1】:

聚合在 cassandra 中作为 CASSANDRA-4914 的一部分提供,在 2.2.0-rc1 版本中提供。

【讨论】:

    【解决方案2】:

    在一个特定的应用程序中,我们使用 Cassandra 来提高写入速度,然后让应用程序将数据压缩成更压缩、稍微聚合的摘要形式。然后我们每小时运行一个作业,将汇总表复制到 Postgres 表中。这种方法在优雅方面得分不高,但它很简单,这意味着我们可以运行即席分析查询,而不必使主要数据入口路径复杂化,也不必在 CQL 应用程序中构建定制聚合。

    【讨论】:

      【解决方案3】:

      看看这个

      本机聚合

      计数

      count 函数可用于计算查询返回的行数。 示例:

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

      它也可以用来计算给定列的非空值:

      SELECT COUNT (scores) FROM plays;
      

      最大值和最小值

      max 和 min 函数可用于计算最大值和 查询返回给定列的最小值。例如:

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

      总和

      sum 函数可用于将 a 返回的所有值相加 查询给定的列。例如:

      SELECT SUM (players) FROM plays;
      

      平均

      avg 函数可用于计算所有值的平均值 由给定列的查询返回。例如:

      SELECT AVG (players) FROM plays;
      

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

      【讨论】:

        【解决方案4】:

        这只是我们在案例中所做的建议。要在 cassandra 数据库上进行聚合,您需要使用 PIG 或 HIVE 等语言,它们在内部生成 map-reduce 代码,这对于集群中的大数据表现非常好。为此,您需要设置 Hadoop 环境。处理完成后,可以将cassandra database或sqoop中处理后的数据写入mysql数据库。

        【讨论】:

          【解决方案5】:

          根据数据的性质,如果需要对时间序列等数据进行聚合,或许应该考虑使用 Kdb+。

          我还在评估 Cassandra 存储时间序列遥测数据的能力。我认为这是一个完美的契合。但是,我发现没有聚合函数。也许这可以用 Pig 和 Hive 解决。但是,如果存在将数据摄取、存储和分析结合到一种语言中的解决方案,您为什么不考虑呢?

          【讨论】:

          • Mongo 可能是用例的不错选择。你能解释一下你为什么这么做吗?
          【解决方案6】:

          我将 Cassandra 视为一种存储引擎,它解决了分布和可用性问题,同时保持了规模和性能。当然,权衡是灵活性和功能性。在数据库世界中,它总是要在功能和性能之间进行权衡。

          话虽如此,Cassandra 与 Spark 等第三方软件配合得非常好。 Spark 可能对您的用例非常有帮助。有一个开源连接器https://github.com/datastax/spark-cassandra-connector 可帮助 Spark 智能地查找并运行对 Cassandra 数据的分析。

          SparkSQL 允许您运行 SELECT sum 以及大多数符合 hive 的查询。

          【讨论】:

            【解决方案7】:

            您可以使用 Apache Lucene 插件 (https://github.com/Stratio/cassandra-lucene-index) 在 Cassandra 中创建自定义索引,或者您可以使用适合您目的的不同软件(搜索引擎数据存储),例如 Elasticsearch (https://www.elastic.co/products/elasticsearch),它也是可扩展的和开源的。

            Elasticsearch 还可以与 Kibana 一起用于基于您的聚合数据的数据可视化。

            【讨论】:

              猜你喜欢
              • 2019-05-18
              • 2015-03-10
              • 1970-01-01
              • 2016-03-22
              • 2013-08-14
              • 2019-05-04
              • 1970-01-01
              • 2014-11-15
              • 2013-10-14
              相关资源
              最近更新 更多