incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aaron morton <aa...@thelastpickle.com>
Subject Re: Composite Slice Query returning non-sliced data
Date Tue, 10 Jul 2012 09:40:30 GMT
Ah, it's a Hector query question. 

You may have bette luck on the Hector email list. Or if you can turn on debug logging on the
server and grab the query that would be handy. 

The first thing that stands out is that (in cassandra) comparison operations are not used
in a slice range. 

Cheers
 
-----------------
Aaron Morton
Freelance Developer
@aaronmorton
http://www.thelastpickle.com

On 10/07/2012, at 12:36 PM, Sunit Randhawa wrote:

> 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