Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cassandra 1.2 inserting/updating a blob column type using Python and the cql library

Intro

I have a blob column on a Cassandra 1.2 column family, the table is defined as follows:

CREATE TABLE objects (
   id        text,
   obj       blob,
   PRIMARY KEY (id)
);

The problem:

The problem is that when I need to insert/update the blob column from Python using the cql library, I need to base 16 encode the contents of the column like this:

import cPickle
import cql
...
def save_object(connection, obj):
    object['id']  = obj['id']
    object['obj'] = cPickle.dumps(obj).encode("hex")
    cql_statement = "INSERT INTO objects (id, obj) values (:id, :obj)"
    cursor = connection.cursor()
    cursor.execute(cql_statement, object)

The question:

Is there a way of executing this query without using the base 16 encoding(string) of the object? The reason for this is to reduce the overhead of sending a base 16 encoded string over the wire instead of plain bytes.

Thank in advance!

like image 354
Sergio Ayestarán Avatar asked May 27 '13 20:05

Sergio Ayestarán


1 Answers

Base64 or HEX?

if your question is not encoding into base64 yes you can, however you must provide your data into CQL in HEX format.

If your question is not coverting into HEX, No it is not possible.

As blob defined in CQL documentation

A blob constant is an hexadecimal number defined by 0xX+ where hex is an hexadecimal character, e.g. [0-9a-fA-F]. For example, 0xcafe.

So this clearly means that you need to send your data in HEX format.

like image 51
Boynux Avatar answered Oct 19 '22 06:10

Boynux