目前使用 -
cqlsh> show version
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
使用phantom-dsl 1.12.2,Scala 2.10 ..
我无法弄清楚如何在查询上设置一致性级别。
有预定义的函数insert()
,select()
作为CassandraTable
的一部分。我怎样才能将一致性级别传递给它们?
insert.value(....).consistencyLevel_=(ConsistencyLevel.QUORUM)
不起作用并因错误而失败(可能是因为这会在查询结尾处附加“USING CONSISTENCY QUORUM”)。这是我得到的实际例外
com.datastax.driver.core.exceptions.SyntaxError: line 1:424 no viable alternative at input 'CONSISTENCY'
at com.datastax.driver.core.Responses$Error.asException(Responses.java:122) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:120) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:186) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.access$2300(RequestHandler.java:45) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:754) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:576) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
我从this pull请求的文档和讨论中看到我可以在SimpleStatement上执行setConsistencyLevel(ConsistencyLevel.QUORUM)
,但我不希望重写所有不同的insert语句。
UPDATE
只是关闭这个问题的循环。我通过创建一个自定义InsertQuery
然后使用它而不是final def insert
中的CassandraTable
提供的那个来解决这个问题。
def qinsert()(implicit keySpace: KeySpace) = {
val table = this.asInstanceOf[T]
new InsertQuery[T, M, Unspecified](table, CQLQuery("INSERT into keyspace.tablename", consistencyLevel = ConsistencyLevel.QUORUM)
}
首先,幻像中没有setValue
方法,你使用的API方法最后缺少一个=
。
正确的结构是:
Table.insert
.value(_.name, "test")
.consistencyLevel_=(ConsistencyLevel.Quorum)
正如您在stackoverflow上一样,错误堆栈跟踪和不起作用的具体细节通常比“不工作”更可取。
我终于想出了如何使用phantom-dsl正确设置一致性级别。
使用语句,您可以执行以下操作:
statement.setConsistencyLevel(ConsistencyLevel.QUORUM)
另外,看一下测试项目,我一直在努力帮助像你这样的人使用phantom-dsl的例子: