c# - Cassandra CQL INSERT 查询因未配置的列族而被拒绝

标签 c# cassandra cql datastax

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

最佳答案

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

INSERT INTO "KeyspaceName"."ColumnFamilyName" (key, column1, value) VALUES (?, ?, ?)
                         ^ ^
                         | 
                         This is where the magic happens!

关于c# - Cassandra CQL INSERT 查询因未配置的列族而被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768034/

相关文章:

cassandra - 在 Cassandra CQL 中,有没有办法查询集合列类型的大小?

c# - 返回 Task.Factory.StartNew( ()=>{ ; } ) 不正确吗?

C# + WPF : how should I do proper checks/guards/casts when accessing control values?

c# - 使用 PathGradientBrush 创建的阴影显示出不需要的刺结果

cassandra - 在使用 Datastax API(使用新的二进制协议(protocol))时在 Cassandra 中创建列族或表

cassandra - 无法从 cassandra 读取 map

c# - 单击动态添加的按钮时如何触发 aspx 脚本?

java - 如何使用 Hector 在 Cassandra 中保留新的客户行?

cassandra - 如何在 cassandra 中进行同步删除并创建 key 空间?

database - CQL数据模型绕过二级索引问题