Figured out how to get all of the Cassandra key/value pairs for a column using the thrift API. The documentation on top of the horrible naming scheme definitely doesn't make it easy to figure things out quickly. Below is an example in Python
#/usr/bin/env python from thrift import Thrift from thrift.transport import TTransport from thrift.transport import TSocket from thrift.protocol.TBinaryProtocol import TBinaryProtocolAccelerated from cassandra import Cassandra from cassandra.ttypes import * import time socket = TSocket.TSocket("localhost", 9160) transport = TTransport.TBufferedTransport(socket) protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport) client = Cassandra.Client(protocol) keyspace = "MyUberSite" user_uuid = "0ad503dd-2642-4a1e-9113-a75bfd183c34" try: transport.open() print "UUID: ", user_uuid, "\n" # Create a column (user record) who's name is a UUID. # Add two key/value pairs: one for email, one for username column_path = ColumnPath(column_family="Users", column=user_uuid) client.insert( keyspace, "email", column_path, "email@example.com", time.time(), ConsistencyLevel.ZERO) client.insert( keyspace, "username", column_path, "user_account_name", time.time(), ConsistencyLevel.ZERO) # Which column family are we interested in querying. column_parent = ColumnParent(column_family="Users") # A slice dictates our start and stop for column names we are interested in. # We only want records for one column (user) so we are going to set the # start and stop to the same values which is the UUID of the user we # created above. slice_range = SliceRange( start=user_uuid, finish=user_uuid) # Create our predicate using the range instantiated above. predicate = SlicePredicate(slice_range=slice_range) # We want all of the column's (user's) keys so we are going to specify an # empty key range. If we wanted a subset of the columns keys we could # specify that subset here. The range is from start to stop using the # sort we specified when we declared our column family in storage-conf.xml. key_range = KeyRange("", "") # Perform the query and pring the results. print "\n\n".join( map( repr, client.get_range_slices( keyspace, column_parent, predicate, key_range, ConsistencyLevel.ONE))) except Thrift.TException, tx: print 'Thrift: %s' % tx.message finally: transport.close()Print this post
No comments:
Post a Comment