我正在尝试在 cassandra 表中添加一个新列以帮助进行一些客户端操作。该表已经存在,并且其中包含数据。主键是 bigint。
这个想法是在表上添加一个列,该列将创建主键的域。
所以这里的新列是一个int,它必须有<primary-key % 10>的值,这会给我新列的10个可能的值,比如基于主键最后一位的10页。主键被命名idx
,新列被调用idx_page
。
一个想法是将新的 'idx_page' 列添加为 CLUSTERING 列,但这似乎不起作用,使用 ALTER TABLE 语句。如果这应该起作用,那么我可能对我的 cql 语句做错了改变表。
接下来我尝试添加新列,然后在其上添加索引,因为最终客户端将需要根据该列的值执行 SELECT 以获取在新列上具有特定值的所有行。这工作得很好。
无论是idx_page
聚簇列还是带有索引的普通列,仍有两个问题需要解决:
- 现有行在新列上有一个 NULL“值”(这是预期的)
- 我必须找出最好的方法,即当插入新行时,将为新列分配一个基于主键计算的值,最好不要通过更改所有客户端代码来手动执行此操作。
我想我可以通过使用 cassandra FUNCTIONS 和 AGGREGATES 来解决这两个问题?
理想情况下,我希望能够手动调用某个函数一次,以更新所有现有行,并为 分配一个值idx_page
,该值始终由 (idx % 10) 计算。
然后在插入时,我希望自动运行相同的逻辑,以便 idx_page 在插入阶段获得一个值。
我不确定如何进行此操作,或者即使我使用 UDF/UDA 走在正确的道路上。
请有任何意见或建议。
亚历克斯