对于未配置的列族拒绝了Cassandra CQL INSERT查询

问题描述 投票:1回答:1

我正在尝试使用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将列族引用为表格。我应该如何配置表格?

c# cassandra cql datastax
1个回答
9
投票

该异常基本上意味着您尚未创建该列族。您可以检索它,但异常告诉您它正在寻找名为KeyspaceName.ColumnFamilyName的cf。您必须在单独的引号中包含“KeyspaceName”和“ColumnFamilyName”,否则解析器将认为您只为列族提供名称。它将查看您的查询,我想将数据插入名称为“KeyspaceName.ColumnFamilyName”的列族中,因此请尝试:

INSERT INTO "KeyspaceName"."ColumnFamilyName" (key, column1, value) VALUES (?, ?, ?)
                         ^ ^
                         | 
                         This is where the magic happens!
© www.soinside.com 2019 - 2024. All rights reserved.