InvalidRequestException(原因:by-columns子句中没有带有“equals”运算符的索引列)

时间:2013-09-10 11:37:48

标签: java cassandra

我创建了一个键空间并使用一些列名创建了列族。并且还以编程方式在该键空间中添加了记录。现在我要在keyapce中添加一个coulmn并添加新记录。这是成功的......但是当使用equals运算符搜索新的列字段值时,我得到以下异常me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:No indexed columns present in by-columns clause with "equals" operator)

我认为有些行没有新的列字段......这是一个问题吗?..你能不能请任何人帮助我如何解决这个问题?....在Normal Relational数据库中我们如果在表中添加任何新列,可以向现有记录添加空值...无论如何我们可以用cassandra来解决这个问题吗?....我的最终结果应该是我能够搜索到记录与新列字段....

1 个答案:

答案 0 :(得分:0)

是的...您获得异常的原因是非indexed中新添加的列执行相等或类似的操作;在改变列族时,你必须写出例如。

column_metadata = [{column_name : 'username',
    validation_class : UTF8Type,
    index_name : 'username_idx',
    index_type : 0}]

所以你的最终修改查询就像这样

UPDATE COLUMN FAMILY your_CF_name with column_type = 'Standard'
      and comparator = 'UTF8Type'
      and default_validation_class = 'UTF8Type'
      and key_validation_class = 'UTF8Type'
      and column_metadata = [
        {column_name : 'your_all_existing_columns',
        validation_class : your_all_existing_validation_class,
        index_name : 'user_defined_name',
        index_type : 0},
           .
           .
           .
    {column_name : 'your_new_additional_column',
        validation_class : your_validation_class,
        index_name : 'user_defined_name',
        index_type : 0}];