我是新来Cassandra的。我必须用c#在cassandra中一次性插入50000行。我用的是Cassandrac#驱动程序。我使用下面的代码在cassandra中插入数据。请帮帮我
string tableName = "" + ConfigurationManager.AppSettings["tableName"];
string keySpace = "test";// "" + ConfigurationManager.AppSettings["Keyspace"];
//string query = "INSERT INTO " + tableName + " (emp_name, emp_position,emp_firstname,uniqueid) VALUES (?, ?,?,?)"; //; "SELECT * FROM "+ tableName + " limit 2 ";
string query = string.Empty;
query =
"BEGIN BATCH " +
"INSERT INTO " + tableName + " (emp_name, emp_position,emp_firstname,uniqueid) VALUES (?, ?,?,?);" +
"INSERT INTO " + tableName + " (emp_name, emp_position,emp_firstname,uniqueid) VALUES (?, ?,?,?);" +
"INSERT INTO " + tableName + " (emp_name, emp_position,emp_firstname,uniqueid) VALUES (?, ?,?,?);" +
" APPLY BATCH";
BatchStatement(keySpace, query,
Convert.ToString("ashish" + i), 2, Convert.ToString("Mohan" + i), System.Guid.NewGuid(),
Convert.ToString("ashish" + i), 2, Convert.ToString("Mohan" + i), System.Guid.NewGuid(),
Convert.ToString("ashish" + i), 2, Convert.ToString("Mohan" + i), System.Guid.NewGuid()
public void BatchStatement(string keySpace, string query, params object[] parameter)
{
try
{
BatchStatement objBatchStatement = new BatchStatement();
PreparedStatement statement = PrepareQueryStatement(keySpace, query);
objBatchStatement.Add(statement.Bind(parameter));
var session = cluster.Connect(keySpace);
//objBatchStatement.ConsistencyLevel
// Execute the batch
//RowSet row = session.Execute(query);
RowSet row = session.Execute(objBatchStatement);
}
catch (Exception ex)
{
Console.WriteLine("Excpetion occured during batch operation method Name BatchStatement error : " + ex.ToString());
}
}
我得到错误:批处理中的语句无效:只允许update、insert和delete语句。
2条答案
按热度按时间n7taea2i1#
要回答具体问题。。。
批处理中的语句无效:只允许update、insert和delete语句。
ca1c2owp2#
我不太了解你的代码示例,所以我不知道你是否在使用
SELECT
似乎是问题所在的批中的查询。不管怎样,你可能误用了Batch
因为cassandra中的批处理用于原子性而不是性能(大多数情况下)。如果您希望尽可能快地插入这50000行,那么使用异步方式执行50000个插入会更快(建议这样做)
session.ExecuteAsync
. 尝试以下操作:对于需要插入更多行的更高级用例,可能需要控制并发执行的请求数,但是标准任务并行库已经为您完成了其中的一些工作。
唯一一个
Batch
当您可以使用属于同一分区的语句创建微批处理时,要比单独异步执行所有这些请求快得多,但这要困难得多,而且您可能不需要这样的性能增益。更新
在你编辑你的问题后,我可以理解代码示例。如果你还想用
Batch
与我上面建议的方法不同,您要做的是: