Re: Composite Slice Query returning non-sliced data

2012-07-10 Thread aaron morton
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=134187983347)
 
 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);
 
SliceQueryString, Composite, String sq
  =  HFactory.createSliceQuery(keyspace, StringSerializer.get(),
   new CompositeSerializer(),
   StringSerializer.get());
sq.setColumnFamily(Rollup15);
 
sq.setKey(query1_1337295600);
sq.setRange(start, finish, false, 1);
 
QueryResultColumnSliceComposite, String result = sq
.execute();
ColumnSliceComposite, String orderedRows = result.get();
 
 6- And I get output for RowKey: query1_1337295600 as
 (column=15:Composite1:Composite2, value=value123, timesta
 mp=134187983347) 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 aa...@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
 

Re: Composite Slice Query returning non-sliced data

2012-07-10 Thread Tyler Hobbs
I think in this case that's just Hector's way of setting the EOC byte for a
component.  My guess is that the composite isn't being structured correctly
through Hector, as well.

On Tue, Jul 10, 2012 at 4:40 AM, aaron morton aa...@thelastpickle.comwrote:


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




-- 
Tyler Hobbs
DataStax http://datastax.com/


Re: Composite Slice Query returning non-sliced data

2012-07-10 Thread Sunit Randhawa
I have tested this extensively and EOC has huge issue in terms of
usability of CompositeTypes in Cassandra.

As an example: If you have 2 Composite Columns such as A:B:C and A:D:C.

And if you do search on A:B as start and end Composite Components, it
will return D as well. Because it returns all the remaining columns
from your start range.

Similarly if you do search on A:D as start and end Composite
Components, it will not return B because the D comes after B.

Sadly, the information given here on intro to composite Types:
http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1
also does not work.

On Tue, Jul 10, 2012 at 9:24 AM, Tyler Hobbs ty...@datastax.com wrote:
 I think in this case that's just Hector's way of setting the EOC byte for a
 component.  My guess is that the composite isn't being structured correctly
 through Hector, as well.


 On Tue, Jul 10, 2012 at 4:40 AM, aaron morton aa...@thelastpickle.com
 wrote:


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




 --
 Tyler Hobbs
 DataStax



Re: Composite Slice Query returning non-sliced data

2012-07-10 Thread Tyler Hobbs
On Tue, Jul 10, 2012 at 2:20 PM, Sunit Randhawa sunit.randh...@gmail.comwrote:

 I have tested this extensively and EOC has huge issue in terms of
 usability of CompositeTypes in Cassandra.

 As an example: If you have 2 Composite Columns such as A:B:C and A:D:C.

 And if you do search on A:B as start and end Composite Components, it
 will return D as well. Because it returns all the remaining columns
 from your start range.


That shouldn't be happening, and I can test that it works correctly using
pycassa.  So I suspect a problem with Hector.



 Similarly if you do search on A:D as start and end Composite
 Components, it will not return B because the D comes after B.


This is expected behavior.



 Sadly, the information given here on intro to composite Types:
 http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1
 also does not work.

 On Tue, Jul 10, 2012 at 9:24 AM, Tyler Hobbs ty...@datastax.com wrote:
  I think in this case that's just Hector's way of setting the EOC byte
 for a
  component.  My guess is that the composite isn't being structured
 correctly
  through Hector, as well.
 
 
  On Tue, Jul 10, 2012 at 4:40 AM, aaron morton aa...@thelastpickle.com
  wrote:
 
 
  The first thing that stands out is that (in cassandra) comparison
  operations are not used in a slice range.
 
 
 
 
  --
  Tyler Hobbs
  DataStax
 




-- 
Tyler Hobbs
DataStax http://datastax.com/


Re: Composite Slice Query returning non-sliced data

2012-07-09 Thread Sunit Randhawa
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=134187983347)

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);

SliceQueryString, Composite, String sq
  =  HFactory.createSliceQuery(keyspace, StringSerializer.get(),
   new CompositeSerializer(),
   StringSerializer.get());
sq.setColumnFamily(Rollup15);

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

QueryResultColumnSliceComposite, String result = sq
.execute();
ColumnSliceComposite, String orderedRows = result.get();

6- And I get output for RowKey: query1_1337295600 as
(column=15:Composite1:Composite2, value=value123, timesta
mp=134187983347) 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 aa...@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++;
 }
 }
 SliceQueryString, 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, 1);

 QueryResultColumnSliceComposite, String result = sq
 .execute();
 ColumnSliceComposite, String 

Re: Composite Slice Query returning non-sliced data

2012-07-08 Thread aaron morton
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++;
   }
   }
   SliceQueryString, 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, 1);
 
   QueryResultColumnSliceComposite, String result = sq
   .execute();
   ColumnSliceComposite, 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 aa...@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 aa...@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.
 
 
 
 



Re: Composite Slice Query returning non-sliced data

2012-07-06 Thread aaron morton
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 aa...@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.
 
 



Re: Composite Slice Query returning non-sliced data

2012-07-06 Thread Sunit Randhawa
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++;
}
}
SliceQueryString, 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, 1);

QueryResultColumnSliceComposite, String result = sq
.execute();
ColumnSliceComposite, 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 aa...@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 aa...@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.






Re: Composite Slice Query returning non-sliced data

2012-07-05 Thread aaron morton
 #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.



Re: Composite Slice Query returning non-sliced data

2012-07-05 Thread Sunit Randhawa
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 aa...@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.