[
https://issues.apache.org/jira/browse/PHOENIX-953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14682204#comment-14682204
]
Maryann Xue commented on PHOENIX-953:
-------------------------------------
Thanks, [~julianhyde]! That's a good guide to me.
I suggest implementing the below examples as our initial scope:
1. UNNEST(subquery/derived_table) \[WITH ORDINALITY\] AS ...
2. UNNEST(literal_array) \[WITH ORDINALITY\] AS ...
For each of the above, we can turn them into DerivedTableNode with an "UNNEST"
and a "ORDINALITY" flag:
1. DerivedTableNode\[select_node=subquery, unnest=true, with_ord=true/false,
as_schema=...\]
2. DerivedTableNode\[select_node="select literal_array", unnest=true,
with_ord=true/false, as_schema=...\]
Aside from the grammar changes required for UNNEST itself, we might have to add
support for "AS" for defining a temporary table structure.
Changes in QueryCompiler should be simple: we handle UNNEST in our derived
table compilation, and wrap the "innerPlan" with UnnestArrayQueryPlan if the
flag is true. And we might need to check that the table structure (which is a
PTable object in Phoenix but is called RowType in calcite) is consistent with
the UNNEST content.
For the other example [~julianhyde] had mentioned "SELECT student, score FROM
tests CROSS JOIN UNNEST(scores) AS t (score)", we might want to do it a little
later, since more changes need to be made to support UNNEST that depends on a
preceding table.
> Support UNNEST for ARRAY
> ------------------------
>
> Key: PHOENIX-953
> URL: https://issues.apache.org/jira/browse/PHOENIX-953
> Project: Phoenix
> Issue Type: Sub-task
> Reporter: James Taylor
> Assignee: Dumindu Buddhika
> Attachments: PHOENIX-953-v1.patch
>
>
> The UNNEST built-in function converts an array into a set of rows. This is
> more than a built-in function, so should be considered an advanced project.
> For an example, see the following Postgres documentation:
> http://www.postgresql.org/docs/8.4/static/functions-array.html
> http://www.anicehumble.com/2011/07/postgresql-unnest-function-do-many.html
> http://tech.valgog.com/2010/05/merging-and-manipulating-arrays-in.html
> So the UNNEST is a way of converting an array to a flattened "table" which
> can then be filtered on, ordered, grouped, etc.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)