使用Hector客户端从Cassandra检索多个列值



我正在与Cassandra一起工作,我正在使用Hector客户端读取和更新Cassandra数据库中的数据。我试图检索数据从卡桑德拉数据库使用赫克托客户端,我能够做到这一点,如果我试图检索只有一个列。

现在我试图检索rowKey as 1011的数据,但columnNames作为字符串的集合。下面是我的API,将检索数据从卡桑德拉数据库使用赫克托客户端-

public Map<String, String> getAttributes(String rowKey, Collection<String> attributeNames, String columnFamily) {
    final Cluster cluster = CassandraHectorConnection.getInstance().getCluster();       
    final Keyspace keyspace = CassandraHectorConnection.getInstance().getKeyspace();
    try {
        ColumnQuery<String, String, String> columnQuery = HFactory
                .createStringColumnQuery(keyspace)
                .setColumnFamily(columnFamily).setKey(rowKey)
                .setName("c1");
        QueryResult<HColumn<String, String>> result = columnQuery.execute();
        System.out.println("Column Name from cassandra: " + result.get().getName() + "Column value from cassandra: " + result.get().getValue());
    } catch (HectorException e) {
        LOG.error("Exception in CassandraHectorClient::getAttributes " +e+ ", RowKey = " +rowKey+ ", Attribute Names = " +attributeNames);
    } finally {
        cluster.getConnectionManager().shutdown();
    }

    return null;
}

如果你看到我上面的方法,我正试图从Cassandra数据库检索特定rowKeycolumn c1的数据。现在我正试图从Cassandra数据库中检索数据,以获取特定rowKey的列集合。

意思是这样的-

我想检索多个列的数据,但对于相同的rowKey。我如何使用赫克托客户端做到这一点?我不想检索所有列的数据,然后迭代找出我正在寻找的单个列的数据。

使用组合键组成的列名作为UTF8Type和TIMEUUID的组合

之后
sliceQuery.setKey("your row key");
Composite startRange = new Composite();
startRange.addComponent(0, "c1",Composite.ComponentEquality.EQUAL);
Composite endRange = new Composite();
endRange.addComponent(0, "c1",Composite.ComponentEquality.GREATER_THAN_EQUAL);
sliceQuery.setRange(startRange,endRange, false, Integer.MAX_VALUE);
QueryResult<ColumnSlice<Composite, String>> result = sliceQuery.execute();
ColumnSlice<Composite, String> cs = result.get();

上面的代码将为您的行键提供所有记录之后按如下方式迭代

for (HColumn<Composite, String> col : cs.getColumns()) {
System.out.println("column key's first part : "+col.getName().get(0, HFactoryHelper.stringSerializer).toString());
System.out.println("column key's second part : "+col.getName().get(1, HFactoryHelper.uuidSerializer).toString());
System.out.println("column key's value : "+col.getValue());
}

有些地方需要编写逻辑来维护记录集

最新更新