Hi Jim,

This would still involve either having a fixed(ish) schema, with a handful
of pre-written prepared statements that I fill the values into, or some
rather horrific StringBuilder that generates the statement based on some
logic. Prepared Statements work great, for example, for inserting users
where the columns are known eg 'firstname, lastname, postcode', but what
about when you want to add timeseries data with the timestamp as the column?
I would have to do something like (ignore incorrect syntax for now):

        String myQuery = "INSERT INTO myKeyspace.myTable (id," +
myPojo.getTimestamp() + "," + myPojo.getMySecondTimestamp() + ") VALUES
(?,?, ?);";
        Session.execute(boundStatement.bind("row1",
myPojo.getValue(),myPojo.getSecondValue());

Which is already a bit ugly, but when you start talking about a handful or a
few dozen columns, it will become unmanageable.

In HBase, we do something like:

        Put put = new Put(id);
        put.add(myPojo.getTimestamp(), myPojo.getValue());
        put.add(myPojo.getMySecondTimestamp(), myPojo.getSecondValue());
        server.put(put);

Is there any similar mechanism in Cassandra Java driver for creating these
inserts programmatically? Or, can the 'session.execute' take a list of
commands so that each column can be inserted as its own insert statement but
without the overhead of multiple calls to the server?

Thanks!
Matt


-----Original Message-----
From: Jim Witschey [mailto:jim.witsc...@datastax.com]
Sent: 23 April 2015 14:46
To: user@cassandra.apache.org
Subject: Re: Creating 'Put' requests

Are prepared statements what you're looking for?

http://docs.datastax.com/en/developer/java-driver/2.1/java-driver/quick_start/qsSimpleClientBoundStatements_t.html
Jim Witschey

Software Engineer in Test | jim.witsc...@datastax.com





On Thu, Apr 23, 2015 at 9:28 AM, Matthew Johnson <matt.john...@algomi.com>
wrote:
> Hi all,
>
>
>
> Currently looking at switching from HBase to Cassandra, and one big
> difference so far is that in HBase, we create a ‘Put’ object, add to
> it a set of column/value pairs, and send the Put to the server. So far
> in Cassandra 2.1.4 the tutorials seem to suggest using CQL3, which I
> really like for prototyping eg:
>
>
>
> session.execute("INSERT INTO simplex.playlists (id, song_id, title,
> album,
> artist) VALUES (1,1,'La Petite Tonkinoise','Bye Bye
> Blackbird','Joséphine Baker');");
>
>
>
> But for more complicated code this will quickly become unmanageable,
> and doesn’t lend itself well to dynamically creating row data based on
> various conditions. Is there a way to send a Java object, populated
> with the desired column/value pairs, to the server instead of executing an
> insert statement?
> Would this require some other library, or does the DataStax Java
> driver support this already?
>
>
>
> Thanks in advance,
>
> Matt
>
>

Reply via email to