为什么Cassandra不允许在更新语句中使用udf?

时间:2016-03-21 18:56:27

标签: cassandra cql udf

我是Cassandra的新手。我创建了一个表,我在其中插入了一些数据,现在我想从中选择数据,在输出中,我想要一些计算列。

我创建了一个用户定义的函数concat,它连接2个字符串并返回结果。然后我注意到当我在SELECT语句中使用它时,此函数正确显示数据。但是当我在UPDATE语句中使用它时它不起作用:

即,这有效;

select concat(prov,city), year,mnth,acno,amnt from demodb.budgets;

但这不是;

update demodb.budgets set extra=concat(prov,city) where prov='ON';

此外,如果我们只是将一个列的值分配给另一个相同类型的列(没有任何计算),UPDATE也不起作用,如下所示;

update demodb.budgets set extra=city where prov='ON';

此外,即使是简单的算术计算也无法在Update语句中使用;

也就是说,这也不起作用;

update demodb.budgets set amnt = amnt + 20 where prov='ON';

此处amnt是一个简单的双类型列。

(当我看到这个;我所能做的就是几乎不拉我的头发说,我不能和Cassandra一起工作,如果它不能做简单的算术,我不想要它)

有人可以帮助我如何实现所需的更新?

1 个答案:

答案 0 :(得分:0)

我认为你问题的基本答案是在Cassandra 中,Read-before-write是一个巨大的反模式。

分布式环境中的并发问题是关键点。

More info