2012-12-31 41 views
0

我想讀取Cassandra中給定按鍵空間和列族的所有數據類型的行。 讀書,我使用CQL像下面如何使用java從cassandra讀取數據類型的所有行?

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(); 

即使我使用赫克託片查詢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的數據類型的行值。

回答

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; 
} 

僅供參考這裏我使用了節儉的客戶端。

相關問題