[ 
https://issues.apache.org/jira/browse/PHOENIX-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16035310#comment-16035310
 ] 

Loknath Priyatham Teja Singamsetty  commented on PHOENIX-3773:
--------------------------------------------------------------

bq. You might want to check out ArrayAppendFunctionIT which exercises 
ARRAY_APPEND 
Thanks for the pointer James. Was looking into the same and was understanding 
how things were working.

[~jamestaylor] Looks like I found the reason. The 
PArrayDataType.appendItemToArray can be used when you already have an Array 
serialized to bytes with atleast one element in it. We cannot leverage this 
without having an array pre-constructed.

In our case, the requirement is to convert the multiple <T>PDataType to single 
<T>PArrayDataType. There is no such util method which can construct the Array 
from scratch given element one by one to array.

We have to perform serialization/deserialization for one element in order to 
construct the Array, post which we can make use of 
PArrayDataType.appendItemToArray. This would save serialization/deserialization 
cost on the rest of items in first values array result set.

Let me know if this approach is fine with you. 

  

> Implement FIRST_VALUES aggregate function
> -----------------------------------------
>
>                 Key: PHOENIX-3773
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3773
>             Project: Phoenix
>          Issue Type: New Feature
>            Reporter: James Taylor
>            Assignee: Loknath Priyatham Teja Singamsetty 
>              Labels: SFDC
>             Fix For: 4.11.0
>
>         Attachments: PHOENIX-3773_4.x-HBase-0.98.patch, 
> PHOENIX-3773_master.patch, PHOENIX-3773.patch, PHOENIX-3773.v2.patch, 
> PHOENIX-3773.v3.patch
>
>
> Similar to FIRST_VALUE, but would allow the user to specify how many values 
> to keep. This could use a MinMaxPriorityQueue under the covers and be much 
> more efficient than using multiple NTH_VALUE calls to do the same like this:
> {code}
> SELECT entity_id,
>        NTH_VALUE(user_id,1) WITHIN GROUP (ORDER BY last_read_date DESC) as 
> nth1_user_id,
>        NTH_VALUE(user_id,2) WITHIN GROUP (ORDER BY last_read_date DESC) as 
> nth2_user_id,
>        NTH_VALUE(user_id,3) WITHIN GROUP (ORDER BY last_read_date DESC) as 
> nth3_user_id,
>        count(*)
> FROM  MY_TABLE 
> WHERE tenant_id='00Dx0000000XXXX'
> AND entity_id in ('0D5x000000ABCD','0D5x000000ABCE')
> GROUP BY entity_id;
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to