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。此计量器名称不明确。
在 UPDATE
和 DELETE
语句中,必须限制所有主键列,唯一允许的限制是:
- 单列 = 在任何分区键或集群列上
- 最后一个分区键列的单列IN限制
CASSANDRA-6237 解决了 Cassandra 3.0 中的部分限制。
请参阅 DataStax 开发博客中的 post 了解更多信息:A deep look at the CQL WHERE clause。
当我尝试更新 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。此计量器名称不明确。
在 UPDATE
和 DELETE
语句中,必须限制所有主键列,唯一允许的限制是:
- 单列 = 在任何分区键或集群列上
- 最后一个分区键列的单列IN限制
CASSANDRA-6237 解决了 Cassandra 3.0 中的部分限制。
请参阅 DataStax 开发博客中的 post 了解更多信息:A deep look at the CQL WHERE clause。