【问题标题】:Cassandra CQL: counter column creation and modificationCassandra CQL:计数器列的创建和修改
【发布时间】:2012-07-11 12:06:07
【问题描述】:

我正在尝试通过 Java 创建一个计数器列,但在运行它时出现错误。 我正在使用 CQL 3.0.0 和 Cassandra 1.1.2

Statement st = con.createStatement();
String data = "CREATE COLUMNFAMILY user_count(priKey text PRIMARY KEY, countME counter)";
st.execute(data);

这是我得到的错误:

Exception in thread "main" java.sql.SQLSyntaxErrorException:        
org.apache.cassandra.config.ConfigurationException: Cannot add a counter column   
(countme) in a non counter column family

'CREATE COLUMNFAMILY user_count(priKey text PRIMARY KEY, countME counter)'
at org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:179)
at org.apache.cassandra.cql.jdbc.CassandraStatement.execute(CassandraStatement.java:203)
at cassandratest.EdgeCreator.aaListData(EdgeCreator.java:1323)
at cassandratest.Main.main(Main.java:214)

我已经尝试了Cassandra cql comparator type counter 的答案,但我知道 CQL 3.0.0 的 default_validation 不再可用。我搜索了文档,但一无所获。我正在寻找如何使用 Java 创建一个计数器列族并增加它。 提前感谢您的帮助!

这也是我在这里的第一篇文章,所以如果有任何问题,请告诉我,以便我将来更正它。

更新 在 cqlsh 中使用 CREATE 语句时,我得到一个 ConfigurationException。 cqlsh 会话如下:

Connected to Test Cluster at localhost:9160.
[cqlsh 3.0.0 | Cassandra 1.1.0 | CQL spec 3.0.0 | Thrift protocol 19.30.0]
Use HELP for help.
cqlsh> use "Keyspace2";
cqlsh:Keyspace2> CREATE COLUMNFAMILY user_count(priKey text PRIMARY KEY, countME
counter);
Bad Request: org.apache.cassandra.config.ConfigurationException: Cannot add a 
counter column (countme) in a non counter column family
cqlsh:Keyspace2>

【问题讨论】:

  • 在 Cassandra 1.2.2 中为我工作,cqlsh -3:CREATE COLUMNFAMILY user_count(priKey text PRIMARY KEY, countME counter);

标签: cassandra cql


【解决方案1】:

你确定你使用的是 cql 3 吗?从您的回溯中看起来您不是,如果您不小心使用了 cql 2,这就是我所期望的错误。

create 语句应该在 cql 3 中工作。

编辑:您使用的是 cql 3,但您没有使用 Cassandra 1.1.2。这是 1.1.0 的一个已知错误;如果您升级到 1.1.2,应该会修复它。

【讨论】:

  • 我已将所有内容更新到最新版本并更改了连接语句以包含 CQL 版本号:con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/Keyspace2?version=3.0 .0");当我启动程序时,它说它使用的是 CQL 版本 3.0.0
  • 不,我收到关于无法在非计数器列族中添加计数器列的相同错误。但是,当我登录 cqlsh(我更新完所有内容后我没有这样做)时,它说它正在运行 cqlsh 2.2.0
  • 使用 cqlsh -3 选项获取 cql 3。
  • 即使使用 3.0.0,我仍然遇到同样的错误。而且我现在确定我使用的是 3.0.0,因为我现在必须在我的键空间周围加上引号,其中包含大写字符,并指定它是 3.0.0。我很难过:-\
  • 你的意思是CREATE命令失败了,即使在cqlsh -3下?
猜你喜欢
  • 2013-09-04
  • 2013-08-01
  • 2012-02-07
  • 2012-02-06
  • 2017-09-25
  • 2020-01-26
  • 2016-07-10
  • 2018-08-25
  • 2013-08-27
相关资源
最近更新 更多