我正在尝试使用CQL将一些行插入到Cassandra(1.2.16)数据库中,但是Datastax API调用正在被拒绝。该查询是通过PreparedStatement
创建的,并使用BoundStatement
执行,如此
session.Execute (boundStatement);
// query is
INSERT INTO "KeyspaceName.ColumnFamilyName" (key, column1, value) VALUES (?, ?, ?)
被
拒绝Caught an exception Cassandra.InvalidQueryException: unconfigured columnfamily KeyspaceName.ColumnFamilyName
// which happens at the Execute call above
但是,我可以看到列族确实存在
var cluster = Cluster.Builder ()
.AddContactPoint ("127.0.0.1")
.Build ();
new List<string> (cluster.Metadata.GetKeyspaces ()).ForEach ((value) => {
Console.WriteLine ("Keyspace: " + value);
new List<string> (cluster.Metadata.GetKeyspace(value).GetTablesNames()).ForEach((tableName) => {
Console.WriteLine("Table: " + tableName);
});
});
打印(以及其他)
Keyspace: KeyspaceName
Table: ColumnFamilyName
所以列系列就在那里。
为什么Cassandra在执行CQL INSERT
查询时找不到表/列系列?这是版本问题吗?我的印象是,较新版本的CQL将列族引用为表格。我该如何配置表?
答案 0 :(得分:9)
该例外基本上意味着您尚未创建该列系列。您可以检索它,但异常告诉您它正在寻找名为KeyspaceName.ColumnFamilyName
的cf。你必须拥有&#34; KeyspaceName&#34;和#34; ColumnFamilyName&#34;在单独的引号中,否则解析器会认为您只提供列族的名称。它会将您的查询视为,我想将数据插入名称&#34; KeyspaceName.ColumnFamilyName&#34; 的列族中,因此请尝试:
INSERT INTO "KeyspaceName"."ColumnFamilyName" (key, column1, value) VALUES (?, ?, ?)
^ ^
|
This is where the magic happens!