You should probably be using system.nanoTime() not system.currentTimeInMillis(). The user is free to set the timestamp to whatever they like but nano-time is the standard (it is what the cli uses, and what cql will use)
On Thu, May 30, 2013 at 3:33 PM, Keith Wright <kwri...@nanigans.com> wrote: > Sorry, typo in code sample, should be: > > ssTableWriter.newRow(StringSerializer.get().toByteBuffer("20101201")); > Composite columnComposite = new Composite(); > columnComposite.setComponent(0,5,IntegerSerializer.get()); > columnComposite.setComponent(1,10,IntegerSerializer.get()); > > ssTableWriter.addColumn( > CompositeSerializer.get().toByteBuffer(columnComposite), null, > System.currentTimeMillis() ); > > From: Keith Wright <kwri...@nanigans.com> > Date: Thursday, May 30, 2013 3:32 PM > To: "user@cassandra.apache.org" <user@cassandra.apache.org> > Subject: Re: Bulk loading into CQL3 Composite Columns > > You do not want to repeat the first item of your primary key again. If > you recall, in CQL3 a primary key as defined below indicates that the row > key is the first item (key) and then the column names are composites of > val1,val2. Although I don't see why you need val2 as part of the primary > key in this case. In any event, you would do something like this (although > I've never tested passing a null value): > > ssTableWriter.newRow(StringSerializer.get().toByteBuffer("20101201")); > Composite columnComposite = new Composite(); > columnComposite(0,5,IntegerSerializer.get()); > columnComposite(0,10,IntegerSerializer.get()); > ssTableWriter.addColumn( > CompositeSerializer.get().toByteBuffer(columnComposite), > null, > System.currentTimeMillis() > ); > > From: Daniel Morton <dan...@djmorton.com> > Reply-To: "user@cassandra.apache.org" <user@cassandra.apache.org> > Date: Thursday, May 30, 2013 1:06 PM > To: "user@cassandra.apache.org" <user@cassandra.apache.org> > Subject: Bulk loading into CQL3 Composite Columns > > Hi All. I am trying to bulk load some data into a CQL3 table using the > sstableloader utility and I am having some difficulty figuring out how to > use the SSTableSimpleUnsortedWriter with composite columns. > > I have created this simple contrived table for testing: > > create table test (key varchar, val1 int, val2 int, primary key (key, > val1, val2)); > > Loosely following the bulk loading example in the docs, I have constructed > the following method to create my temporary SSTables. > > public static void main(String[] args) throws Exception { > final List<AbstractType<?>> compositeTypes = new ArrayList<>(); > compositeTypes.add(UTF8Type.instance); > compositeTypes.add(IntegerType.instance); > compositeTypes.add(IntegerType.instance); > final CompositeType compType = > CompositeType.getInstance(compositeTypes); > SSTableSimpleUnsortedWriter ssTableWriter = > new SSTableSimpleUnsortedWriter( > new File("/tmp/cassandra_bulk/bigdata/test"), > new Murmur3Partitioner() , > "bigdata", > "test", > compType, > null, > 128); > > final Builder builder = > new CompositeType.Builder(compType); > > builder.add(bytes("20101201")); > builder.add(bytes(5)); > builder.add(bytes(10)); > > ssTableWriter.newRow(bytes("20101201")); > ssTableWriter.addColumn( > builder.build(), > ByteBuffer.allocate(0), > System.currentTimeMillis() > ); > > ssTableWriter.close(); > } > > When I execute this method and load the data using sstableloader, if I do > a 'SELECT * FROM test' in cqlsh, I get the results: > > key | val1 | val2 > ---------------------------- > 20101201 | '20101201' | 5 > > And the error: Failed to decode value '20101201' (for column 'val1') as > int. > > The error I get makes sense, as apparently it tried to place the key value > into the val1 column. From this error, I then assumed that the key value > should not be part of the composite type when the row is added, so I > removed the UTF8Type from the composite type, and only added the two > integer values through the builder, but when I repeat the select with that > data loaded, Cassandra throws an ArrayIndexOutOfBoundsException in the > ColumnGroupMap class. > > Can anyone offer any advice on the correct way to insert data via the bulk > loading process into CQL3 tables with composite columns? Does the fact > that I am not inserting a value for the columns make a difference? For my > particular use case, all I care about is the values in the column names > themselves (and the associated sorting that goes with them). > > Any info or help anyone could provide would be very much appreciated. > > Regards, > > Daniel Morton >