【问题标题】:How to insert a new column to a row using CQL如何使用 CQL 在行中插入新列
【发布时间】:2016-12-31 22:55:44
【问题描述】:

我想知道如何使用 CQL 将新列插入一行...

有可能吗? 如果没有,我如何使用 Fluent Cassandra 轻松做到这一点?

谢谢。

【问题讨论】:

    标签: cassandra fluentcassandra


    【解决方案1】:

    CQL 希望您预先定义架构。如果您需要动态模式,则必须使用基于 Thrift 的客户端之一。 Fluent Cassandra 支持这一点; check here.

    【讨论】:

    • 当你说前面的模式时,你是说在我插入一个新列之前我必须执行一个 CQL,比如: ALTER TABLE messages ADD ColunaTeste varchar; ?那是对的吗?好吧,我在这里做了并且工作了,这样做有什么问题吗?谢谢!
    • 是的,您在插入之前进行了更改。 CQL 需要架构,因为它是底层存储行之上的外观。 Cassandra 本身并不关心,但 CQL 引擎会。
    【解决方案2】:

    使用 FluentCassandra,您可以轻松地向现有行添加新列:

    var cFamily = db.GetColumnFamily("TestCF");
    cFamily.InsertColumn(rowKey, columnName, columnValue);
    

    或者,您可以这样做:

    var cFamily = db.GetColumnFamily("TestCF");
    var record = cFamily.CreateRecord(existingRowKey) //record already exists
    record[newColumnName] = newColumnValue;
    

    【讨论】:

    • 值得注意的是,经过一些基本的计时,后一种解决方案(CreateRecord)似乎比使用 InsertColumn 快 3 倍左右。
    【解决方案3】:

    使用 FluentCassandra:

    dbcontext.ExecuteNonQuery("update TargetColumnFamily set 'ColumnName'='ColumnValue' 
       where keyname='RowKeyValue'")
    

    在我的测试中,我发现如果该行不存在,它将创建该行。不知道如何针对非文本进行调整。

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 1970-01-01
      • 2016-09-12
      • 2015-03-25
      • 2014-03-13
      • 2013-05-22
      • 2012-12-30
      • 2014-06-02
      • 2019-09-14
      相关资源
      最近更新 更多