Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cassandra中通过计算更新列_Cassandra_User Defined Functions_User Defined Aggregate - Fatal编程技术网

在cassandra中通过计算更新列

在cassandra中通过计算更新列,cassandra,user-defined-functions,user-defined-aggregate,Cassandra,User Defined Functions,User Defined Aggregate,我试图在cassandra表中添加一个新列,以帮助进行一些客户端操作。表已经存在,并且其中包含数据。主键是一个bigint。 其思想是在表中添加一列,该列将创建主键的域。 因此,这里的新列是一个int,必须具有的值将 为新列提供10个可能的值,例如基于主键最后一位的10页。 主键名为idx,新列名为idx_page 一个想法是添加新的“idx_page”列作为集群列,但使用ALTER TABLE语句似乎不起作用。如果这应该是可行的,那么我可能在修改表的cql语句中出错了 我尝试的下一件事是添加新

我试图在cassandra表中添加一个新列,以帮助进行一些客户端操作。表已经存在,并且其中包含数据。主键是一个bigint。 其思想是在表中添加一列,该列将创建主键的域。 因此,这里的新列是一个int,必须具有的值将
为新列提供10个可能的值,例如基于主键最后一位的10页。 主键名为idx,新列名为idx_page

一个想法是添加新的“idx_page”列作为集群列,但使用ALTER TABLE语句似乎不起作用。如果这应该是可行的,那么我可能在修改表的cql语句中出错了

我尝试的下一件事是添加新列,然后在该列上添加索引,因为最终客户端需要基于该列的值进行选择,以便获取在新列上具有特定值的所有行。这很有效。 无论idx_页面是群集列还是带有索引的普通列,仍有两个问题需要解决:

1) 现有行在新列上的“值”为空(应为空) 2) 我必须找出最好的方法,当插入新行时,新列将被分配一个基于主键计算的值,最好不要通过更改所有客户端代码来手动执行此操作

我想我可以通过使用cassandra函数和聚合来解决这两个问题

理想情况下,我希望能够手动调用某个函数一次,以更新所有现有行,并为idx_页面分配一个值,该值始终由(idx%10)计算。 然后在插入时,我希望自动运行相同的逻辑,以便idx_页面在插入阶段获得一个值

我不知道如何处理这个问题,甚至不知道我是否在UDF/UDA的正确道路上

任何意见或建议请


Alex

您可以构建一个自定义函数来完成此任务


我已尝试执行更新操作,例如:
updatetable1 set idx_page=(idx%10)
失败了,显然目前只有+和-以这种方式受支持,其他运算符包括%(模)不受支持。您好,谢谢。这就解决了模内不直接支持的问题。但原始问题中描述的两个问题仍未解决。
CREATE FUNCTION IF NOT EXISTS moduluo (input bigint) 
   CALLED ON NULL INPUT 
   RETURNS int 
   LANGUAGE java AS '
     return input % 10;
     ';