Generally, inside a particular storage engine, it is the storage
engine's optimization rules which decide how to represent the what
happens with optimization. So while what you have is reasonable, I
would actually guess that you'd be more likely to have something where
all the ops simply turn into a sql query within the plan (as opposed
to a complicated set of operations). For an example, I'll use HBase.
In that case, HBase has the concept of filters and column family and
column qualifiers. The optimization rules that convert a filter would
be defined to transform the physical filter operator into a an HBase
filter. The HBase filter would be something that could be easily
passed to HBase.
Does that make sense?
Thanks,
Jacques
On Tue, May 7, 2013 at 10:02 AM, Lisen Mu <immars@gmail.com> wrote:
> Hi Jacques,
>
> If you got time, would you like to check the test case at:
>
> git@github.com:immars/incubator-drill.git
>
> branch mysqlse-wip
>
> which forked from your execwork and fixed some protoc problem in pom.
>
> There is a test at MySQLSETest, which only parses physical plans at:
>
> mysql_plan.json
> mysql_plan2.json
>
> Am I representing push down correctly, with .json and MySQLScanPOP? It's
> all in ops field.
>
> Many thanks...
>
> //mysql_plan2.json
> {
> head:{
> type:"APACHE_DRILL_PHYSICAL",
> version:"1",
> generator:{
> type:"manual",
> info:"na"
> }
> },
> graph:[
> {
> @id:1,
> pop:"scan-mysql",
> entries:[
> {id:0, location: "jdbc:mysql://localhost:3306/drilltest", tables:
> ["employee","department"], parent: 1},
> {id:1, location: "jdbc:mysql://localhost:3306/drilltest2", tables:
> ["employee","department"], parent: 1}
> ],
> output: [ //todo: map column to outputs?
> {mode: "VECTOR", type: "INT32"}, //field 0
> {mode: "VECTOR", type: "BYTES"}, //field 1
> {mode: "VECTOR", type: "BYTES"} //field 2
> ],
> ops:[
>
> {
> @id:5,
> child:1,
> pop:"filter",
> expr: "id==16"
> },
> {
> @id: 6,
> pop: "join",
> type: "INNER",
> left: 5,
> right: 1,
> conditions:[{
> relationship: "==",
> left: "employee.deptId",
> right: "department.id"
> }]
> },
> {
> @id: 4,
> child: 1,
> pop:"project",
> exprs: [
> { ref: "output.dept_name", expr: "department.name"},
> { ref: "output.guy_name", expr: "employee.name"},
> { ref: "output.guy_salary", expr: "employee.salary"}
> ]
> }
> ]
> },
> {
> @id:10,
> child:1,
> pop:"log-store"
> }
> ]
> }
|