it's not clear to me if your "id" column is the KEY or just a regular
column with secondary index.

queries that have IN on non primary key columns isn't supported yet. not
sure if that answers your question.


On Thu, Mar 13, 2014 at 7:12 AM, David Savage <davemssav...@gmail.com>wrote:

> Hi there,
>
> I'm experimenting using cassandra and have run across an error message
> which I need a little more information on.
>
> The use case I'm experimenting with is a series of document updates
> (documents being an arbitrary map of key value pairs), I would like to find
> the latest document updates after a specified time period. I don't want to
> store many copies of the documents (one per update) as the updates are
> often only to single keys in the map so that would involve a lot of
> duplicated data.
>
> The solution I've found that seems to fit best in terms of performance is
> to have two tables.
>
> One that has an event log of timeuuid -> docid and a second that stores
> the documents themselves stored by docid -> map<string, string>. I then run
> two queries, one to select ids that have changed after a certain time:
>
> SELECT id FROM eventlog WHERE timestamp>=minTimeuuid($minimumTime)
>
> and then a second to select the actual documents themselves
>
> SELECT id, data FROM documents WHERE id IN (0, 1, 2, 3, 4, 5, 6, 7...)
>
> However this then explodes on query with the error message:
>
> "Cannot restrict PRIMARY KEY part id by IN relation as a collection is
> selected by the query"
>
> Detective work lead me to these lines in
> org.apache.cassandra.cql3.statementsSelectStatement:
>
>                     // We only support IN for the last name and for
> compact storage so far
>                     // TODO: #3885 allows us to extend to non compact as
> well, but that remains to be done
>                     if (i != stmt.columnRestrictions.length - 1)
>                         throw new
> InvalidRequestException(String.format("PRIMARY KEY part %s cannot be
> restricted by IN relation", cname));
>                     else if (stmt.selectACollection())
>                         throw new
> InvalidRequestException(String.format("Cannot restrict PRIMARY KEY part %s
> by IN relation as a collection is selected by the query", cname));
>
> It seems like #3885 will allow support for the first IF block above, but I
> don't think it will allow the second, am I correct?
>
> Any pointers on how I can work around this would be greatly appreciated.
>
> Kind regards,
>
> Dave
>

Reply via email to