2016-05-26 102 views
1

當我嘗試在我的卡桑德拉表更新數據,我得到了以下錯誤消息:卡桑德拉更新語句

型「Cassandra.InvalidQueryException」未處理的異常發生在Cassandra.dll

其他信息:切片限制不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。這metername並不鮮明。

回答

0

UPDATEDELETE語句所有主鍵列必須被限制,並且只允許的限制是:上的任何分區鍵或集羣列

  • 單柱IN

    • 單柱=對最後一個分區鍵列的限制

    CASSANDRA-6237解決了Cassandra 3.0中那些限制的一部分。

    看到這篇文章在DataStax開發博客的更多信息:A deep look at the CQL WHERE clause