【问题标题】:DataStax DevCenter issue with count(*)计数(*)的 DataStax DevCenter 问题
【发布时间】:2015-02-11 02:32:31
【问题描述】:

我们使用的是 DevCenter 1.2.0,从 DataStax 网站上看,下面的内容似乎没有被 1.2.1 处理。

DevCenter 1.2.0 强制对“选择...”查询进行隐式限制,允许值最大为 1000,并且不能为空。限制框的限制值可以被显式的 LIMIT 子句覆盖。

这在运行“标准”查询时可以正常工作,但无法获得 select count() 查询的有效结果。这是因为在 Cassandra 中,LIMIT 子句适用于源而不是结果(与 SQL btw 不同)。因此,如果您在 DevCenter 中执行 'select count() from my_table',如果当前限制为 100,您将获得 100 的结果,如果当前限制为 200,您将获得 200 的结果,依此类推。恐怕没什么用。

如果您通过执行“从 my_table 限制 1000000000000 中选择计数(*)”来覆盖限制,那么您会超时。

删除 DevCenter 中“选择计数”查询的隐式限制是否有意义?

【问题讨论】:

  • 我没有,但我不明白这会如何影响阻碍的 LIMIT 子句。

标签: select count limit datastax


【解决方案1】:

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

  • 您将获得有或无限制的超时,因为它必须对您的表进行全面扫描。因为查询没有“WHERE”子句。因此,限制“1000000000000”或没有限制与超时几乎相同。
  • 如果您需要进行频繁查询以了解所有行的数量。此查询不应该是您的第一选择。例如,考虑使用具有计数器类型的任何其他表。
  • “select count(*)”读取的行数与“select *”相同,所以为什么只从 count 中删除限制将无济于事。
  • 限制并非没用。假设您只需要数百万个结果中的 10 行样本。

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

【讨论】:

  • 我不得不说这是一个非常没用的答案。选择计数 (*) 是您希望在开发环境中经常执行的操作。
  • 在开发环境中,您没有 teras 的数据,也没有超时。这个答案是为了证明为什么 CQL 有限制子句。
  • @Zain Malik:我在 Dev 中遇到一百万行超时。如果 devcenter 提供了一个可配置的超时,这不会是一个问题。
【解决方案2】:

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

【讨论】:

  • 使用新版本 1.6 更改/修复了查询对我的工作方式。谢谢!
猜你喜欢
  • 2016-05-15
  • 2015-09-28
  • 2016-02-15
  • 2018-04-13
  • 2018-06-29
  • 2014-08-18
  • 2014-05-08
  • 2018-05-14
  • 2019-08-31
相关资源
最近更新 更多