<<<<<<<<<<< Courtney Robinson [sa...@live.co.uk]
Hello everyone, I'm sorry if that has been asked already, i've just joined the list. can anyone provide a quick java example of connecting to cassandra and setting up a keyspace and a column family using thrift. I know my way around 0.6 and i'm trying to get ready to migrate to 0.7 when its stable. Please and thank you. <<<<<<<<<< There is a way to search the email list, and I must add your question is more a u...@cassandra than dev. Here can you search the email list http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/ And I have done some experiments with 0.7 and Java so I could provide you with some help. The most interesting news I think is the secondary indices. I also post some info a blog on www.justus.st<http://www.justus.st> where I format the text a little better than this =) New about opening the connection, here the important thing is to set the framed transport, this is important and is a change that will be the only option in later versions. /** * Open up a new connection to the Cassandra Database. * * @return the Cassandra Client */ private static Cassandra.Client newCassandraConnection(String address) throws TTransportException { TTransport tr = new TSocket(adress, 9160); TFramedTransport tf = new TFramedTransport(tr); TProtocol proto = new TBinaryProtocol(tf); Cassandra.Client client = new Cassandra.Client(proto); tr.open(); return client; } In this part it is possible to set all CF definitions when creating the keyspace, although it is not necessary so I did it afterwards. /** * @param keyspacename * @param replicafactor * @throws InvalidRequestException * @throws TException */ public static void createKeySpace(String keyspacename, int replicafactor ) throws InvalidRequestException, TException { Cassandra.Client c = Connection.lendConnection(); try { c.describe_keyspace(keyspacename); System.out.println("Keyspace already exists"); } catch (NotFoundException e) { System.out.println("Keyspace not found, creating new "+ keyspacename); KsDef k = new KsDef(); k.setName(keyspacename); k.setReplication_factor(replicafactor); k.setStrategy_class("org.apache.cassandra.locator.RackUnawareStrategy"); List<CfDef> cfDefs = new ArrayList<CfDef>(); k.setCf_defs(cfDefs); c.system_add_keyspace(k); } Connection.returnConnection(c); } /** * @param keyspacename * @param columnname * @param columntype * @param comparatortype * @param subcomparatortype * @param row_cache_size * @param key_cache_size * @param comment * @throws InvalidRequestException * @throws TException * @throws NumberFormatException * @throws IOException */ public static void createColumnFamily(String keyspacename, String columnname, String columntype, String comparatortype, String subcomparatortype, double row_cache_size, double key_cache_size, String comment) throws InvalidRequestException, TException, NumberFormatException, IOException { CfDef cdef = new CfDef(); cdef.setColumn_type(columntype); cdef.setComment(comment); cdef.setComparator_type(comparatortype); cdef.setKey_cache_size(key_cache_size); cdef.setRow_cache_size(row_cache_size); cdef.setSubcomparator_type(subcomparatortype); cdef.setKeyspace(keyspacename); cdef.setName(columnname); Cassandra.Client c = Connection.lendConnection(); c.set_keyspace(keyspacename); c.system_add_column_family(cdef); Connection.returnConnection(c); } /** * @param keyspacename * @param columnname * @param columntype * @param comparatortype * @param subcomparatortype * @param row_cache_size * @param key_cache_size * @param comment * @param listIndexes * @throws InvalidRequestException * @throws TException * @throws NumberFormatException * @throws IOException */ public static void createColumnFamilyWithSecondaryIndices(String keyspacename, String columnname, String columntype, String comparatortype, String subcomparatortype, double row_cache_size, double key_cache_size, String comment, ArrayList<SecondaryIndices> listIndexes ) throws InvalidRequestException, TException, NumberFormatException, IOException { CfDef cdef = new CfDef(); cdef.setColumn_type(columntype); cdef.setComment(comment); cdef.setComparator_type(comparatortype); cdef.setKey_cache_size(key_cache_size); cdef.setRow_cache_size(row_cache_size); cdef.setSubcomparator_type(subcomparatortype); cdef.setKeyspace(keyspacename); cdef.setName(columnname); for(SecondaryIndices si : listIndexes) { cdef.addToColumn_metadata(si.getCdef()); } Cassandra.Client c = Connection.lendConnection(); c.set_keyspace(keyspacename); c.system_add_column_family(cdef); Connection.returnConnection(c); } public class SecondaryIndices { private ColumnDef cdef; /** * @param columnkey * @param indexname */ public SecondaryIndices(byte[] columnkey, String indexname, String validationclass) { cdef = new ColumnDef(); cdef.setIndex_name(indexname); //borde vara indexnamnet cdef.setName(columnkey);//borde vara columnnamnet cdef.setIndex_type(IndexType.KEYS); cdef.setValidation_class(validationclass); } public ColumnDef getCdef() { return cdef; } } I haven't tested the secondary indices yet but I think it is this way it works to create, to get there is a method called get_indexed_slices(columnParent, clause, slicePredicate, consistency); //this is fairly easy to understand but IndexOperator.. I leave that for now IndexExpression expr = new IndexExpression(columnkey, IndexOperator.EQ, columnvalue); //expr made into a fixed list why I do not know, new byte == startkey and 100 is count. I dont realy know what parameters do yet IndexClause clause = new IndexClause(Arrays.asList(expr), new byte[]{}, 100); Hope this helps Regards /Justus AB SVENSKA SPEL 106 10 Stockholm Sturegatan 11, Sundbyberg Växel +46 8 757 77 00 http://svenskaspel.se