0

Cassandraの特定のキースペースと列ファミリーのデータ型を持つすべての行を読み取りたい。データを読み取るために、以下のようにCQLを使用してみました

CqlQuery<String, String, ByteBuffer> cqlQuery = new CqlQuery<String, String, ByteBuffer>(keyspaceOperator, se, se, be);

cqlQuery.setQuery("select * from colfam1");

QueryResult<CqlRows<String, String, ByteBuffer>> result = cqlQuery.execute();

HectorスライスクエリAPIも使ってみました

 Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "localhost:9160");

 Keyspace keyspace = HFactory.createKeyspace("rajesh", cluster);
    SliceQuery<String, String, String> sliceQuery = HFactory.createSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer);
    sliceQuery.setColumnFamily("colfam1").setKey("key123");
    sliceQuery.setRange("", "", false, 4);

 QueryResult<ColumnSlice<String, String>> result = sliceQuery.execute(); 

しかし、どちらの方法でも、すべての行を読み取ることはできましたが、データ型を読み取ることはできません。

誰かがjavaを使用してcassandraからデータ型の行値を読み取るのを手伝ってもらえますか?

4

1 に答える 1

0

値を含む行の読み取りは非常に簡単です。しかし、メタデータも読みたいです。これがその解決策です

public Map<String, ArrayList<String>>  getMetaData(Client _client, String _keyspace) throws SQLException, NotFoundException, InvalidRequestException, TException{
    ArrayList<String> columnfamilyNames = new ArrayList<String>();
    ArrayList<String> columnNames = new ArrayList<String>();
    ArrayList<String> validationClasses = new ArrayList<String>();
    Map<String, ArrayList<String>> metadataMapList =new HashMap<String,ArrayList<String>>();
    KsDef keyspaceDefinition = _client.describe_keyspace(_keyspace);
    List<CfDef> columnDefinition = keyspaceDefinition.getCf_defs();
    for(int i=0;i<columnDefinition.size();i++){
        List<ColumnDef> columnMetadata = columnDefinition.get(i).getColumn_metadata();
        for(int j=0;j<columnMetadata.size();j++){
            columnfamilyNames.add(columnDefinition.get(i).getName());
            columnNames.add(new String((columnMetadata.get(j).getName())));
            validationClasses.add(columnMetadata.get(j).getValidation_class());
        }
    }
    metadataMapList.put("columnfamilyName", columnfamilyNames);
    metadataMapList.put("ColumnName", columnNames);
    metadataMapList.put("validationClass", validationClasses);
    return metadataMapList;
}

参考までに、ここではthrift clientを使用しました。

于 2013-03-07T11:16:04.577 に答える