通过hector检查cassandra中的动态列是否已经存在二级索引

vptzau2j  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(389)

在数据导入到我的cassandra测试集群之后,我发现我需要一些列的二级索引。因为数据已经在集群中,所以我想通过更新columnfamilydefinitions来实现这一点。
现在,问题是:这些列是动态列,因此它们对getcolumnmetadata()调用不可见。
如何通过hector检查是否已经创建了二级索引,如果不是这样,如何创建一个索引(我认为如何创造它的部分可以在http://comments.gmane.org/gmane.comp.db.hector.user/3151 )
如果不可能,是否必须将此动态列族中的所有数据复制到静态列族中?

r6vfmomb

r6vfmomb1#

不需要将动态列族中的所有数据复制到静态列族中。
那怎么办??让我用一个例子来解释你,假设你有一个下面提到的cf模式:

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

注意,我已经对标志和名称做了索引。
下面是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

从这些数据中,您可以理解address、id和col1都是动态创建的。
如果我问这样的问题

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

所以基本上如果你有一个列,它的值总是你知道的,并且它被索引了。然后,您可以轻松地筛选其余的动态列,并使用索引始终为正的列对它们进行聚合。

相关问题