C# 中的 Cassandra 更新语句

Cassandra update statement in C#

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

An unhandled exception of type 'Cassandra.InvalidQueryException' occurred in Cassandra.dll

Additional information: Slice restrictions are not supported on the clustering columns in UPDATE statements

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

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。此计量器名称不明确。

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

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

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

请参阅 DataStax 开发博客中的 post 了解更多信息:A deep look at the CQL WHERE clause