【问题标题】:Check via Hector if secondary index already exists for a dynamic column in Cassandra通过 Hector 检查 Cassandra 中的动态列是否已经存在二级索引
【发布时间】:2013-04-30 10:34:46
【问题描述】:

数据导入到我的 Cassandra 测试集群后,我发现我需要为某些列创建二级索引。由于数据已经在集群中,我想通过更新 ColumnFamilyDefinitions 来实现这一点。

现在,问题是:这些列是动态列,因此它们对 getColumnMetaData() 调用是不可见的。

如何通过 Hector 检查是否已经创建了二级索引,如果没有创建二级索引? (我认为如何创建它的部分可以在http://comments.gmane.org/gmane.comp.db.hector.user/3151找到)

如果无法做到这一点,我是否必须将此动态列族中的所有数据复制到静态列族中?

【问题讨论】:

    标签: indexing cassandra hector dynamic-columns


    【解决方案1】:

    无需将动态列族中的所有数据复制到静态列族中。

    那么如何??让我用一个例子来解释一下,假设你有一个下面提到的 CF 模式:

    CREATE TABLE sample (
      KEY text PRIMARY KEY,
      flag boolean,
      name text
    )
    

    注意我已经对 flagname 进行了索引。

    现在是 CF 中的一些数据。

     KEY,1 | address,Kolkata | flag,True | id,1 | name,Abhijit
     KEY,2 | address,Kolkata | flag,True | id,2 | name,abc
     KEY,3 | address,Delhi | flag,True | id,3 | name,xyz
     KEY,4 | address,Delhi | flag,True | id,4 | name,pqr
     KEY,5 | address,Delhi | col1,Hi | flag,True | id,4 | name,pqr
    

    从数据中您可以了解到 addressidcol1 都是动态创建的。

    现在如果我查询类似的内容

    SELECT * FROM sample WHERE flag =TRUE AND col1='Hi';
    

    注意:col1 没有被索引,但我可以使用该字段进行过滤

    输出:

      KEY | address | col1 | flag | id | name
     -----+---------+------+------+----+------
        5 |   Delhi |   Hi | True |  4 |  pqr
    

    另一个查询

     SELECT * FROM sample WHERE flag =TRUE AND id>=1 AND id <5 AND address='Delhi';
    

    注意:这里既没有索引 id,也没有索引地址,我仍然得到输出

    输出:

      KEY,3 | address,Delhi | flag,True | id,3 | name,xyz
      KEY,4 | address,Delhi | flag,True | id,4 | name,pqr      
      KEY,5 | address,Delhi | col1,Hi | flag,True | id,4 | name,pqr
    

    所以基本上,如果你有一列的值总是你知道的,并且它被索引。然后,您可以轻松过滤其余动态列,将它们与索引始终为正的列聚合在一起。

    【讨论】:

    • 感谢您的回答。我的问题是所有列在列族中都是动态的。所以我必须将至少一列从动态切换到静态。与此同时,我创建了一个新的 Column 族并将所有内容从旧的复制到新的。
    • 是的,您的专栏中至少有一个应该是静态的,我认为这没什么大不了的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多