2015-02-11 56 views
2

我们使用的是DevCenter 1.2.0,并且从DataStax网站下面似乎没有被1.2.1所强调。DataStax DevCenter问题(*)

DevCenter 1.2.0对'select ...'查询强制隐式限制,允许值最大为1000,且不能为空。限制框中的限制值可以通过明确的LIMIT子句覆盖。

在运行'标准'查询时,此功能正常运行,但无法为选择计数()查询获得有效结果。这是因为在Cassandra中,LIMIT子句适用于源代码而不是结果(与SQL btw不同)。因此,如果您在DevCenter中'从my_table'中选择count(),那么如果当前限制为100,则结果为100;如果当前限制为200,则结果为200等等。我很害怕没用。

如果您通过'从my_table限制1000000000000'选择count(*)来覆盖限制,那么您会得到一个超时。

删除DevCenter中“select count”查询的隐式限制是否合理?

+0

我还没有,但我不明白这可能会影响LIMIT条款,这是如此。 – 2015-02-12 04:08:25

回答

3

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

  • 你会得到有或没有限制的超时,因为它必须对你的表进行全面扫描。因为查询没有'WHERE'子句。所以限制'1000000000000'或者没有限制与超时几乎是一样的。
  • 如果您需要频繁查询才能知道所有行的数量。这个查询不应该是你的第一选择。例如,考虑使用任何其他具有计数器类型的表。
  • “select count(*)”读取与“select *”相同的行数,为什么只从count中删除限制不会有帮助。
  • 限制不是没用的。想象一下,你只需要从数以百万计的10行结果的样本。

在我看来,你应该考虑增加超时时间或使用任何cassandra驱动程序来制作一个小应用程序来为你做这些。或者考虑HIVE或改变你的模型,如果你打算使用这个查询太多。

+1

我不得不说这是一个很无用的答案。选择计数(*)是您想要在开发环境中经常进行的操作。 – Peter 2015-06-02 21:51:31

+0

在开发环境中,您没有数据的特征,并且没有超时。这个答案是证明为什么CQL有限制条款。 – 2015-06-04 05:21:22

1

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

+0

使用新版本1.6更改/修复了查询如何为我工作。谢谢! – 2016-09-29 17:49:22