Hi Saneth,

If i'm not mistaken we can achieve this using a custom transform. Since you
have a separate table which holds all the books, You simply check using
some java code and send the result as an output stream.

Then your query would something like below,

from userboughtbooks#window.time(10 min)

select userboughtbooks.book_id as boughtBooks

insert into IntermediateOutputStream


from IntermediateOutputStream#transform.custom:AvailableBook(boughtBooks)

select availableBook

insert into RecommendationsOutputDataStream


where AvailableBook would be your custom transform written in Java.



Thanks & Regards,
S.A.Rajeevan
Software Engineer WSO2 Inc
E-Mail: rajeev...@wso2.com | Mobile : +94776411636

On Thu, Oct 16, 2014 at 12:52 PM, Seshika Fernando <sesh...@wso2.com> wrote:

> Hi Saneth,
>
> The reason for this is because, when you put a != , the join happens as
> follows.
> [image: Inline image 2]
>
>
> This is why you get book1 and book2 once and book3, and book4 twice, in
> your RecommendationsOutputStream. You may have to use a count operator from
> the RecommendationsOutputStream to determine which books have not been
> bought.
>
> Seshika
>
>
>
> On Thu, Oct 16, 2014 at 12:29 PM, Rajeev Sampath <raje...@wso2.com> wrote:
>
>> Hi,
>>
>> On Thu, Oct 16, 2014 at 12:07 PM, Saneth Dharmakeerthi <sane...@wso2.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I am writing a Siddhi query to get the un-purchased books from an  event
>>> table that has all  the books and a stream that contains  the already
>>> bought books.
>>>
>>> my quarry is like  this;
>>>
>>> *userboughtbooks: *Stream that contains  the already bought books
>>> *bookGroupTable: *Table that has all  the books
>>> *RecommendationsOutputDataStream: *Out  put stream that contains  all
>>> un-purchased books.
>>>
>>> from userboughtbooks#window.time(10 min) join bookGroupTable
>>> on  bookGroupTable.book_id  != userboughtbooks.book_id
>>> select bookGroupTable.book_id
>>> insert into RecommendationsOutputDataStream
>>>
>>> 1. when  userboughtbooks has one element it gives the correct result.
>>>
>>> userboughtbooks: book1
>>> bookGroupTable: book1, book2, book3, book4
>>> RecommendationsOutputDataStream: book2, book3, book4
>>>
>>> 2. but  userboughtbooks has more than one element  gives the out put
>>> like follows
>>>
>>> userboughtbooks: book1, book2
>>> bookGroupTable: book1, book2, book3, book4
>>> RecommendationsOutputDataStream: book1,book2,book3,book3,book4,book4
>>>
>>> I think behaviour of [2] , because of joining with  more than one
>>> element.
>>>
>>> Is there a recommended way to accomplish this task?
>>>
>>>
>>>
>> As a workaround to solve this, you can add another query to check whether
>> each output of recommendations stream exists in the table and then output
>> only the non existing ones.
>>
>> eg:
>>
>> from RecommendationsOutputDataStream [not ((book_id ==
>> bookGroupTable.book_id ) in bookGroupTable)]
>> select *
>> insert into filteredRecommendationsStream;
>>
>>
>> Thanks
>> Rajeev
>>
>>
>>
>>>
>>> Thanks and Best Regards,
>>>
>>> Saneth Dharmakeerthi
>>> Senior Software Engineer
>>> WSO2, Inc.
>>> Mobile: +94772325511
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> Dev@wso2.org
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> Rajeev Sampath
>> Senior Software Engineer
>> WSO2, Inc.; http://www.wso2.com.
>>
>> Mobile:
>> * +94716265766 <%2B94716265766>*
>>
>> _______________________________________________
>> Dev mailing list
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to