带有count(*)的DataStax DevCenter问题

时间:2015-02-11 02:32:32

标签: select count limit datastax

我们正在使用DevCenter 1.2.0,而在DataStax网站上,1.2.1似乎没有对其进行解析。

DevCenter 1.2.0强制隐含限制'选择...'查询,允许值最多1000,并且不能为空。限制框的限制值可以通过显式LIMIT子句覆盖。

运行'标准'查询,但无法获得选择计数()查询的有效结果。这是因为在Cassandra中,LIMIT子句适用于源而不是结果(与SQL btw不同)。因此,如果您选择从my_table'中选择计数()在DevCenter中,如果当前限制为100,则结果为100;如果当前限制为200,则结果为200,依此类推。我很害怕,这很无用。

如果您通过执行'覆盖限制,请从my_table限制1000000000000'中选择计数(*)。然后你会超时。

删除' select count'的隐含限制是否有意义?在DevCenter中查询?

2 个答案:

答案 0 :(得分:3)

这不是Devcenter的问题。你应该考虑一些事情

  • 您将获得有或没有限制的超时,因为它必须对您的表进行全面扫描。因为查询没有'WHERE'子句。因此限制'1000000000000'或没有限制与超时几乎相同。
  • 如果您需要经常查询以了解所有行的数量。此查询不应该是您的首选项。例如,考虑使用具有计数器类型的任何其他表。
  • “select count(*)”读取与“select *”相同的行数,那么为什么只删除限制而不是计数呢?
  • 限制不是没用的。想象一下,你只需要一个10行的结果样本。

在我看来,您应该考虑增加超时或使用任何cassandra驱动程序制作一个小应用程序来为您计算。如果您要过多地使用此查询,请考虑使用HIVE或更改模型。

答案 1 :(得分:1)

DevCenter版本1.6.0不再为选择语句添加隐式LIMIT子句(只要您连接到Cassandra 2.0或更高版本)。