【发布时间】:2020-03-12 07:02:28
【问题描述】:
我正在尝试在 cassandra 表中添加一个新列以帮助执行某些客户端操作。该表已经存在,并且其中包含数据。主键是 bigint。
这个想法是在表上添加一个列,该列将创建主键的域。
所以这里的新列是一个int,它必须有idx,新列名为idx_page。
一个想法是将新的“idx_page”列添加为 CLUSTERING 列,但这似乎不起作用,使用 ALTER TABLE 语句。如果这应该可以工作,那么我的 cql 语句可能做错了改变表格。
接下来我尝试添加新列,然后在其上添加索引,因为最终客户端将需要根据该列的值执行 SELECT 以获取在新列上具有特定值的所有行柱子。这很好用。
无论idx_page 是聚簇列还是带有索引的普通列,仍有两个问题需要解决:
- 现有行在新列上有一个 NULL“值”(这是预期的)
- 我必须找出最佳方法,即当插入新行时,将为新列分配一个基于主键计算的值,最好不要通过更改所有客户端代码来手动执行此操作。
我想我可以通过使用 cassandra FUNCTIONS 和 AGGREGATES 来解决这两个问题?
理想情况下,我希望能够手动调用某个函数一次,以更新所有现有行,并为idx_page 分配一个值,该值始终由 (idx % 10 )。
然后在插入时,我希望自动运行相同的逻辑,以便 idx_page 在插入阶段获得一个值。
我不确定如何进行此操作,或者即使我使用 UDF/UDA 走在正确的道路上。
请提供任何 cmet 或建议。
亚历克斯
【问题讨论】:
-
我尝试进行更新操作,例如:
update table1 set idx_page = (idx %10);它失败了,显然目前这种方式只支持 + 和 -,不支持其他运算符,包括 %(模数) .
标签: cassandra user-defined-functions user-defined-aggregate