2015-02-11 87 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