You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "chenglei (Jira)" <ji...@apache.org> on 2024/07/23 08:06:00 UTC
[jira] [Commented] (PHOENIX-7352) Improve OrderPreservingTracker to support extracting partial ordering columns for TupleProjectionPlan
[ https://issues.apache.org/jira/browse/PHOENIX-7352?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17867979#comment-17867979 ]
chenglei commented on PHOENIX-7352:
-----------------------------------
Pushed to 5.2+, thanks [~tkhurana] for review!
> Improve OrderPreservingTracker to support extracting partial ordering columns for TupleProjectionPlan
> ------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-7352
> URL: https://issues.apache.org/jira/browse/PHOENIX-7352
> Project: Phoenix
> Issue Type: Improvement
> Components: core
> Affects Versions: 5.2.0
> Reporter: chenglei
> Assignee: chenglei
> Priority: Major
> Fix For: 5.2.1, 5.3.0
>
>
> This is an improvement for PHOENIX-5148:
> Given a table:
> {code:java}
> create table test (
> pk1 varchar not null ,
> pk2 varchar not null,
> pk3 varchar not null,
> v1 varchar,
> v2 varchar,
> CONSTRAINT TEST_PK PRIMARY KEY (
> pk1,
> pk2,
> pk3 ))
> {code}
> PHOENIX-5148 optimized following sql to compile outer {{OrderBy}} "order by v2, pk3" because it matches the inner query {{OrderBy}} "order by t.v2, t.pk3, t.v1":
> {code:java}
> select v1 from (select v1, v2, pk3 from test t where pk1 = '6' order by t.v2, t.pk3, t.v1 limit 10) a order by v2, pk3
> {code}
> But if we make a small change to the sql above, just remove the {{t.v1}} in inner query {{OrderBy}} "order by t.v2, t.pk3, t.v1":
> {code:java}
> select v1 from (select v1, v2, pk3 from test t where pk1 = '6' order by t.v2, t.pk3 limit 10) a order by v2, pk3
> {code}
> Obviously, the outer {{OrderBy}} "order by v2,pk3" should still be compiled out because it matches the inner query OrderBy "order by t.v2, t.pk3" , but unfortunately it could not be compiled out now.
> That is because for the inner query of the second sql, we infer the output {{OrderBy}} from "select v1, v2, pk3" based on "order by t.v2, t.pk3". This work is done by {{OrderPreservingTracker}} in {{TupleProjectionPlan}} . But for {{OrderPreservingTracker}}, it could not support extracting partial ordering columns, when it finds that {{v1}} in "select v1, v2, pk3" does not appear in "order by t.v2, t.pk3", {{OrderPreservingTracker.isOrderPreserving}} returns false, and
> {{OrderPreservingTracker.getOrderPreservingTrackInfos}} returns an empty list in {{TupleProjectionPlan}}.
> We should modify {{OrderPreservingTracker}} to make {{OrderPreservingTracker.getOrderPreservingTrackInfos}} could also extract partial continuous ordering columns which start from the first column even if {{OrderPreservingTracker.isOrderPreserving}} is false. That is to say, even if {{v1}} in "select v1, v2, pk3" does not appear in "order by t.v2, t.pk3", it will return the partial ordered "v2, pk3".
--
This message was sent by Atlassian Jira
(v8.20.10#820010)