当我尝试更新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。这个名字并不明显。
答案 0 :(得分:0)
在UPDATE
和DELETE
语句中,必须限制所有主键列,并且唯一允许的限制是:
CASSANDRA-6237解决了Cassandra 3.0中的部分限制。
有关详细信息,请参阅DataStax dev博客上的这篇文章:A deep look at the CQL WHERE clause。