[
https://issues.apache.org/jira/browse/PHOENIX-10?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13885140#comment-13885140
]
James Taylor commented on PHOENIX-10:
-------------------------------------
I think you'd want to rewrite the KeyValue. It would require some client/server
coordination:
>From the client, you'd keep track in ExpressionCompiler any references to any
>ArrayIndexFunction
If the ArrayIndexFunction occurs in the select expressions, you'd want to wrap
in a different expression (since the ArrayIndexFunction would expect your
indexing into the entire array)
Pass through the filter all the KeyValue names used in any ArrayIndexFunction
invocations
When the filter is invoked, you'd want to recognize any of these KeyValues and
re-write it to only include the one element. There might be multiple references
to the same array, so you'd need to deal with that too.
On return the wrapped ArrayIndexFunction expression would know how to retrieve
each array element value (note you don't really care about even returning any
part of the array if it's only used in the WHERE clause).
> Push projection of a single ARRAY element to the server
> -------------------------------------------------------
>
> Key: PHOENIX-10
> URL: https://issues.apache.org/jira/browse/PHOENIX-10
> Project: Phoenix
> Issue Type: Improvement
> Reporter: James Taylor
>
> If only a single array element is selected, we'll still return the entire
> array back to the client. Instead, we should push this to the server and only
> return the single array element. The same goes for the reference to an ARRAY
> in the WHERE clause. There's a general HBase fix for this (i.e. the ability
> to define a separate set of key values that will be returned versus key
> values available to filters) that has a patch here, but is deemed not
> possible to pull into the 0.94 branch by @lhofhansl.
> My thought is that we can add a Filter at the end our our filter chain that
> filters out any KeyValues that aren't in the SELECT expressions (i.e. filter
> out if a column is referenced in the WHERE clause, but not in the SELECT
> expressions). This same Filter could handle returning only the elements of
> the array that are referenced in the SELECT expression rather than the entire
> array.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)