C#中的Cassandra更新语句

时间:2016-05-26 09:51:50

标签: c# cassandra cql

当我尝试更新Cassandra表中的数据时,收到以下错误消息:

  

Cassandra.dll中出现未处理的“Cassandra.InvalidQueryException”类型异常

     

其他信息:UPDATE语句中的群集列不支持切片限制

这是我执行实际更新的代码:

public void updateMeters(List<model> update)
    {
        Connect();
        // List<int> blabla 
        var statement = session.Prepare("UPDATE csvmeter SET meterid=? where MeterName=? and timeStamp<?");
        var tasks = new List<Task>();
        foreach (var item in update)
        {
            var bind = statement.Bind(update.Select(x => x.MeterId), update.Select(x => x.MeterNumber), DateTime.Now);
            var resultSetFuture = session.ExecuteAsync(bind);
            tasks.Add(resultSetFuture);
        }
        Task.WaitAll(tasks.ToArray());
        CloseConnection();
    }

我几乎可以肯定问题出现在and Timestamp<?,因为它是我主键的一部分。

这是我的数据库模型:

Create table csvmeter (
meterName    varchar,
timeStamp    timestamp,
Value        double,
meterID      int,
PRIMARY KEY(meterName, timeStamp));

我想根据Metername更新meterID。这个名字并不明显。

1 个答案:

答案 0 :(得分:0)

UPDATEDELETE语句中,必须限制所有主键列,并且唯一允许的限制是:

  • 任意分区键或群集列上的单列=
  • 最后一个分区键列的单列IN限制

CASSANDRA-6237解决了Cassandra 3.0中的部分限制。

有关详细信息,请参阅DataStax dev博客上的这篇文章:A deep look at the CQL WHERE clause