You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Maryann Xue (JIRA)" <ji...@apache.org> on 2015/10/01 22:09:26 UTC

[jira] [Commented] (PHOENIX-2270) Implement Drill-specific rule for first level server-side sort

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

Maryann Xue commented on PHOENIX-2270:
--------------------------------------

[~jnadeau] Implemented this in https://github.com/jacques-n/drill/pull/4, but not sure if the sort on the Drill side is a merge instead of real sort. Could you please verify?
The query plan is (also printed by the test case):
{code}
00-00    Screen
00-01      Project(B=[$0], E1=[$1], E2=[$2], R=[$3])
00-02        SelectionVectorRemover
00-03          Sort(sort0=[$1], dir0=[DESC])
00-04            Project(B=[$0], E1=[$1], E2=[$2], R=[$3])
                   PhoenixServerSort(sort0=[$1], dir0=[DESC])
                     PhoenixTableScan(table=[[PHOENIX, A, BEER]], filter=[>=($1, 1)])
00-05              Phoenix
	{
  "head" : {
    "version" : 1,
    "generator" : {
      "type" : "ExplainHandler",
      "info" : ""
    },
    "type" : "APACHE_DRILL_PHYSICAL",
    "options" : [ {
      "kind" : "LONG",
      "type" : "SESSION",
      "name" : "planner.width.max_per_node",
      "num_val" : 2
    } ],
    "queue" : 0,
    "resultMode" : "EXEC"
  },
  "graph" : [ {
    "pop" : "jdbc-scan",
    "@id" : 0,
    "scans" : [ "CgMKATASMQoNc2NhblByb2plY3RvchIgAP8EBAQBGAIBAhkCATACRTECGQIBMAJFMgIZAgEwAVISJQoKY29sdW1uSW5mbxIXBAAAAAFCAAAAAkUxAAAAAkUyAAAAAVISFwoSX05vbkFnZ3JlZ2F0ZVF1ZXJ5EgEBEiUKBV9Ub3BOEhyMAUAAAP8AAQAARRkCAP8EBAAAAAEABSQyLkUxKvABCilvcmcuYXBhY2hlLmhhZG9vcC5oYmFzZS5maWx0ZXIuRmlsdGVyTGlzdBLCAQgBElMKPG9yZy5hcGFjaGUucGhvZW5peC5maWx0ZXIuU2luZ2xlQ0ZDUUtleVZhbHVlQ29tcGFyaXNvbkZpbHRlchITFwQCAhkCATACRTEDBYAAAAEGAxJpCjBvcmcuYXBhY2hlLnBob2VuaXguZmlsdGVyLkNvbHVtblByb2plY3Rpb25GaWx0ZXISNQAAABUfiwgAAAAAAAAAMwAAId/b9AEAAAABAAAAFR+LCAAAAAAAAAAzAAAh39v0AQAAAAAAMgwIABD//////////384AUAB" ],
    "config" : {
      "type" : "phoenix",
      "url" : "jdbc:phoenix:localhost",
      "enabled" : true
    },
    "table" : "A.BEER",
    "userName" : "",
    "cost" : 0.0
  }, {
    "pop" : "project",
    "@id" : 4,
    "exprs" : [ {
      "ref" : "`B`",
      "expr" : "`B`"
    }, {
      "ref" : "`E1`",
      "expr" : "`E1`"
    }, {
      "ref" : "`E2`",
      "expr" : "`E2`"
    }, {
      "ref" : "`R`",
      "expr" : "`R`"
    } ],
    "child" : 0,
    "initialAllocation" : 1000000,
    "maxAllocation" : 10000000000,
    "cost" : 50.0
  }, {
    "pop" : "external-sort",
    "@id" : 3,
    "child" : 4,
    "orderings" : [ {
      "expr" : "`E1`",
      "order" : "DESC",
      "nullDirection" : "UNSPECIFIED"
    } ],
    "reverse" : false,
    "initialAllocation" : 20000000,
    "maxAllocation" : 10000000000,
    "cost" : 50.0
  }, {
    "pop" : "selection-vector-remover",
    "@id" : 2,
    "child" : 3,
    "initialAllocation" : 1000000,
    "maxAllocation" : 10000000000,
    "cost" : 50.0
  }, {
    "pop" : "project",
    "@id" : 1,
    "exprs" : [ {
      "ref" : "`B`",
      "expr" : "`B`"
    }, {
      "ref" : "`E1`",
      "expr" : "`E1`"
    }, {
      "ref" : "`E2`",
      "expr" : "`E2`"
    }, {
      "ref" : "`R`",
      "expr" : "`R`"
    } ],
    "child" : 2,
    "initialAllocation" : 1000000,
    "maxAllocation" : 10000000000,
    "cost" : 50.0
  }, {
    "pop" : "screen",
    "@id" : 0,
    "child" : 1,
    "initialAllocation" : 1000000,
    "maxAllocation" : 10000000000,
    "cost" : 50.0
  } ]
}
{code} 

> Implement Drill-specific rule for first level server-side sort
> --------------------------------------------------------------
>
>                 Key: PHOENIX-2270
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2270
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: Maryann Xue
>            Assignee: Maryann Xue
>              Labels: calcite, drill
>
> Phoenix should have a physical operator that executes a sort on the server-side which Drill can leverage when re-ordering is necessary. Unlike PHOENIX-2269 which is clearing going to be more efficient to let Phoenix handle, the sort is more of a gray area. Phoenix will be faster in the way it does the scan within the coprocessor, but it still needs to return the same number of rows. This process puts a pretty heavy burden on the region server as well. We should measure performance with and without Phoenix doing the sort. One potential scenario that may be a win for Phoenix is if the rows are already partially sorted and Phoenix can take advantage of this (which is not currently the case).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)