cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sunit Randhawa <sunit.randh...@gmail.com>
Subject Re: Composite Slice Query returning non-sliced data
Date Tue, 10 Jul 2012 00:36:58 GMT
Aaron,

Let me start from the beginning.

1- I have a ColumnFamily called Rollup15 with below definition:

create column family Rollup15
          with comparator =
'CompositeType(org.apache.cassandra.db.marshal.Int32Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)'
    and key_validation_class = UTF8Type
    and default_validation_class = UTF8Type;


2- Once created, it is empty. Below is the output of CLI:

[default@Schema] list Rollup15;
Using default limit of 100

0 Row Returned.
Elapsed time: 16 msec(s).

3- I use the Code below to insert the Composite Data into Cassandra:

public void insertData(String columnFamilyName, String key,
			String value, int rollupInterval, String... columnSlice) {
		
		Composite colKey = new Composite();
		colKey.addComponent(rollupInterval, IntegerSerializer.get());
		if (columnSlice != null){
			for (String colName : columnSlice){
				colKey.addComponent(colName, serializer);
			}
		}
		createMutator(keyspace, serializer).addInsertion(key, columnFamilyName,
				createColumn(colKey, value, new CompositeSerializer(),
serializer)).execute();

	}

4- After insertion, below is the CLI Output:

[default@Schema] list Rollup15;
Using default limit of 100
-------------------
RowKey: query1_1337295600
=> (column=15:Composite1:Composite2, value=value123, timesta
mp=1341879833470000)

1 Row Returned.
Elapsed time: 9 msec(s).

So, there is record with 3 Composite Keys (15, Composite1 and Composite2)


5- Now I am doing fetch based on Code Below. I am doing a fetch for
column "15:Composite3" which I know it is not there:

Composite start = new Composite();

                start.addComponent(0, 15,
                                Composite.ComponentEquality.EQUAL);
               start.addComponent(1,
"Composite3",Composite.ComponentEquality.EQUAL);


                Composite finish = new Composite();
                finish.addComponent(0, 15,
                                Composite.ComponentEquality.EQUAL);

                finish.addComponent(1,"Composite3"+
Character.MAX_VALUE, Composite.ComponentEquality.GREATER_THAN_EQUAL);

                SliceQuery<String, Composite, String> sq
              =  HFactory.createSliceQuery(keyspace, StringSerializer.get(),
                                           new CompositeSerializer(),
                                           StringSerializer.get());
                sq.setColumnFamily("Rollup15");

                sq.setKey("query1_1337295600");
                sq.setRange(start, finish, false, 10000);

                QueryResult<ColumnSlice<Composite, String>> result = sq
                                .execute();
                ColumnSlice<Composite, String> orderedRows = result.get();

6- And I get output for RowKey: query1_1337295600 as
(column=15:Composite1:Composite2, value=value123, timesta
mp=1341879833470000) which should not be the case since it does not
belong to the 'Composite3' slice.

Sunit.


On Sun, Jul 8, 2012 at 11:45 AM, aaron morton <aaron@thelastpickle.com> wrote:
> Something like:
>
> This is how I did the write in CLI and this is what it printed.
>
> and then
>
> This is how I did the read in the CLI and this is what it printed.
>
> It's hard to imagine what data is in cassandra based on code.
>
> cheers
>
> -----------------
> Aaron Morton
> Freelance Developer
> @aaronmorton
> http://www.thelastpickle.com
>
> On 7/07/2012, at 1:28 PM, Sunit Randhawa wrote:
>
> Aaron,
>
> For writing, i am using cli.
> Below is the piece of code that is reading column names of different types.
>
>
> Composite start = new Composite();
>
> start.addComponent(0, beginTime,
> Composite.ComponentEquality.EQUAL);
>
> if (columns != null){
> int colCount =1;
> for (String colName : columns){
> start.addComponent(colCount,colName,Composite.ComponentEquality.EQUAL);
> colCount++;
> }
> }
>
> Composite finish = new Composite();
> finish.addComponent(0, endTime,
> Composite.ComponentEquality.EQUAL);
>
> if (columns != null){
> int colCount =1;
> for (String colName : columns){
> if (colCount == columns.size())
> finish.addComponent(colCount,colName+ Character.MAX_VALUE,
> Composite.ComponentEquality.GREATER_THAN_EQUAL);
> //Greater_than_equal is meant for any subslices to A:B:C if searched on A:B
> else
> finish.addComponent(colCount,colName,Composite.ComponentEquality.EQUAL);
> colCount++;
> }
> }
> SliceQuery<String, Composite, String> sq
>      =  HFactory.createSliceQuery(keyspace, StringSerializer.get(),
>                                   new CompositeSerializer(),
>                                   StringSerializer.get());
> sq.setColumnFamily(columnFamilyName);
>
> sq.setKey(key);
> logger.debug("Start:"+start+",finish:"+finish);
> sq.setRange(start, finish, false, 10000);
>
> QueryResult<ColumnSlice<Composite, String>> result = sq
> .execute();
> ColumnSlice<Composite, String> orderedRows = result.get();
>
> Please let me know if you additional info.
>
> Thanks,
> Sunit.
>
> On Fri, Jul 6, 2012 at 10:59 AM, aaron morton <aaron@thelastpickle.com>
> wrote:
>
> Can you provide an example of writing and reading column names of a
>
> different type.
>
>
> Thanks
>
>
> -----------------
>
> Aaron Morton
>
> Freelance Developer
>
> @aaronmorton
>
> http://www.thelastpickle.com
>
>
> On 6/07/2012, at 11:30 AM, Sunit Randhawa wrote:
>
>
> HI Aaron,
>
>
> It is
>
>
> create column family CF
>
>           with comparator =
>
> 'CompositeType(org.apache.cassandra.db.marshal.Int32Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)'
>
>   and key_validation_class = UTF8Type
>
>   and default_validation_class = UTF8Type;
>
>
> This is allowing me to insert column names of different type.
>
>
> Thanks,
>
> Sunit.
>
> On Thu, Jul 5, 2012 at 4:24 PM, aaron morton <aaron@thelastpickle.com>
>
> wrote:
>
>
> #2 has the Composite Column and #1 does not.
>
>
>
> They are both strings.
>
>
>
> All column names *must* be of the same type. What was your CF definition ?
>
>
>
> Cheers
>
>
>
> -----------------
>
>
> Aaron Morton
>
>
> Freelance Developer
>
>
> @aaronmorton
>
>
> http://www.thelastpickle.com
>
>
>
> On 6/07/2012, at 7:26 AM, Sunit Randhawa wrote:
>
>
>
> Hello,
>
>
>
> I have 2 Columns for a 'RowKey' as below:
>
>
>
> #1 : set CF['RowKey']['1000']='A=1,B=2';
>
>
> #2: set CF['RowKey']['1000:C1']='A=2,B=3'';
>
>
>
> #2 has the Composite Column and #1 does not.
>
>
>
> Now when I execute the Composite Slice query by 1000 and C1, I do get
>
>
> both the columns above.
>
>
>
> I am hoping get #2 only since I am specifically providing "C1" as
>
>
> Start and Finish Composite Range with
>
>
> Composite.ComponentEquality.EQUAL.
>
>
>
>
> I am not sure if this is by design.
>
>
>
> Thanks,
>
>
> Sunit.
>
>
>
>
>
>

Mime
View raw message