Pushkar Prasad
2013-04-02 14:11:00 UTC
Hi,
This is a Astyanax issue that we've encountered.
I have a scheme as follows:
TimeStamp
Device ID
Device Name
Device Owner
Device location
I have created this column family using CQL and defined the primary key as
(TimeStamp,Device ID, Device Name). Through a serializable object that has
fields for DeviceID, name and a field name (which stores either Device Owner
or
Device Location). I have inserted some records using Astyanax.
As per my understanding, the columns for a row are created by combining
Device ID, Device Name and field name as column name and the value to be the
value for that particular field. Thus for a particular timestamp and device,
the column names would be in the pattern (Device ID:Device Name: ...).
So I believe we can use these 2 fields as prefix to obtain all the entries
for a particular time-device combination.
I am using the following query to obtain the results:
RowSliceQuery<String, ApBaseData> query = adu.keyspace
.prepareQuery(columnFamily)
.getKeySlice(timeStamp)
.withColumnRange(new RangeBuilder()
.setStart(deviceID+deviceName+"_\u00000")
.setEnd(deviceID+deviceName+"_\uffff")
.setLimit(batch_size)
.build());
But on executing the above query I get the following Exception:
BadRequestException: [host=localhost(127.0.0.1):9160, latency=6(6),
attempts=1]InvalidRequestException(why:Not enough bytes to read value of
component 0)
Can any one help to understand where am I going wrong?
This is a Astyanax issue that we've encountered.
I have a scheme as follows:
TimeStamp
Device ID
Device Name
Device Owner
Device location
I have created this column family using CQL and defined the primary key as
(TimeStamp,Device ID, Device Name). Through a serializable object that has
fields for DeviceID, name and a field name (which stores either Device Owner
or
Device Location). I have inserted some records using Astyanax.
As per my understanding, the columns for a row are created by combining
Device ID, Device Name and field name as column name and the value to be the
value for that particular field. Thus for a particular timestamp and device,
the column names would be in the pattern (Device ID:Device Name: ...).
So I believe we can use these 2 fields as prefix to obtain all the entries
for a particular time-device combination.
I am using the following query to obtain the results:
RowSliceQuery<String, ApBaseData> query = adu.keyspace
.prepareQuery(columnFamily)
.getKeySlice(timeStamp)
.withColumnRange(new RangeBuilder()
.setStart(deviceID+deviceName+"_\u00000")
.setEnd(deviceID+deviceName+"_\uffff")
.setLimit(batch_size)
.build());
But on executing the above query I get the following Exception:
BadRequestException: [host=localhost(127.0.0.1):9160, latency=6(6),
attempts=1]InvalidRequestException(why:Not enough bytes to read value of
component 0)
Can any one help to understand where am I going wrong?