Understanding Federated Planning
Planning Overview Example
In Planning Overview Document, there is a example for retrieving all engineering employees born since 1970 via
SELECT e.title, e.lastname FROM Employees AS e JOIN Departments AS d ON e.dept_id = d.dept_id WHERE year(e.birthday) >= 1970 AND d.dept_name = 'Engineering'
In this section we will look more details of this example.
The CANONICAL PLAN
is the start of logical plan, it looks
Project(groups=[pm1.EMPLOYEES AS e], props={PROJECT_COLS=[e.TITLE, e.LASTNAME]})
Select(groups=[pm1.DEPARTMENTS AS d], props={SELECT_CRITERIA=d.DEPT_NAME = 'Engineering'})
Select(groups=[pm1.EMPLOYEES AS e], props={SELECT_CRITERIA=year(e.BIRTHDAY) >= 1970})
Join(groups=[pm1.EMPLOYEES AS e, pm1.DEPARTMENTS AS d], props={JOIN_TYPE=INNER JOIN, JOIN_STRATEGY=NESTED_LOOP, JOIN_CRITERIA=[e.DEPT_ID = d.DEPT_ID]})
Source(groups=[pm1.EMPLOYEES AS e])
Source(groups=[pm1.DEPARTMENTS AS d])
The logical plan optimization including the following steps:
- GENERATE CANONICAL PLAN
- EXECUTING PlaceAccess
- EXECUTING PushSelectCriteria
- EXECUTING PushNonJoinCriteria
- EXECUTING CleanCriteria
- EXECUTING RaiseAccess
- EXECUTING CopyCriteria
- EXECUTING CleanCriteria
- EXECUTING PlanJoins
- EXECUTING PushSelectCriteria
- EXECUTING RaiseAccess
- EXECUTING RulePlanOuterJoins
- EXECUTING ChooseJoinStrategy
- EXECUTING ChooseDependent
- EXECUTING AssignOutputElements
- EXECUTING CalculateCost
- EXECUTING ImplementJoinStrategy
- EXECUTING MergeCriteria
- EXECUTING PlanSorts
- EXECUTING CollapseSource
- CONVERTING PLAN TREE TO PROCESS TREE
- OPTIMIZATION COMPLETE:
optimization complete will create a Processor Plan, it looks
AccessNode(0) output=[e.TITLE, e.LASTNAME] SELECT g_0.TITLE, g_0.LASTNAME FROM pm1.EMPLOYEES AS g_0, pm1.DEPARTMENTS AS g_1 WHERE (g_0.DEPT_ID = g_1.DEPT_ID) AND (year(g_0.BIRTHDAY) >= 1970) AND (g_1.DEPT_NAME = 'Engineering')
Detailed logical plan optimization log
Query Planner Example
In Query Planner Document, ‘Canonical Plan and All Nodes’ section, the example query
SELECT max(pm1.g1.e1) FROM pm1.g1 WHERE e2 = 1
create a logical plan like
Project(groups=[anon_grp0], props={PROJECT_COLS=[anon_grp0.agg0 AS expr1]})
Group(groups=[anon_grp0], props={SYMBOL_MAP={anon_grp0.agg0=MAX(pm1.G1.E1)}})
Select(groups=[pm1.G1], props={SELECT_CRITERIA=pm1.G1.E2 = 1})
Source(groups=[pm1.G1])
The logical plan optimization including the following steps:
- GENERATE CANONICAL
- EXECUTING PlaceAccess
- EXECUTING PushSelectCriteria
- EXECUTING CleanCriteria
- EXECUTING RaiseAccess
- EXECUTING PushAggregates
- EXECUTING AssignOutputElements
- EXECUTING CalculateCost
- EXECUTING MergeCriteria
- EXECUTING PlanSorts
- EXECUTING CollapseSource
- CONVERTING PLAN TREE TO PROCESS TREE
- OPTIMIZATION COMPLETE
Detailed logical plan optimization log
Reading a Debug Plan Example
In Reading a Debug Plan Document, the example query
SELECT e1 FROM (SELECT e1 FROM pm1.g1) AS x
canonical plan form like
Project(groups=[x], props={PROJECT_COLS=[x.E1]})
Source(groups=[x], props={NESTED_COMMAND=SELECT pm1.G1.E1 FROM pm1.G1, SYMBOL_MAP={x.E1=pm1.G1.E1}})
Project(groups=[pm1.G1], props={PROJECT_COLS=[pm1.G1.E1]})
Source(groups=[pm1.G1])
The logical plan optimization including the following steps:
- GENERATE CANONICAL
- EXECUTING PlaceAccess
- EXECUTING AssignOutputElements
- EXECUTING MergeVirtual
- EXECUTING CleanCriteria
- EXECUTING RaiseAccess
- EXECUTING AssignOutputElements
- EXECUTING CalculateCost
- EXECUTING PlanSorts
- EXECUTING CollapseSource
- CONVERTING PLAN TREE TO PROCESS TREE
- OPTIMIZATION COMPLETE
Detailed logical plan optimization log
Portfolio Example
Portfolio Example contains 2 data sources: h2 database(customer-schema.sql) and text file(marketdata-price.txt), 2 data sources are Federated, portfolio-vdb.xml is the VDB which defined Source Model MarketData
, Accounts
and View Model Stocks
.
Direct Query Source Model Accounts
Query SQL
SELECT A.ID, A.SYMBOL, A.COMPANY_NAME from Accounts.Product AS A
Logical Plan
Project(groups=[Accounts.PRODUCT AS A], props={PROJECT_COLS=[A.ID, A.SYMBOL, A.COMPANY_NAME]})
Source(groups=[Accounts.PRODUCT AS A])
The logical plan optimization including the following steps:
- GENERATE CANONICAL
- EXECUTING PlaceAccess
- EXECUTING RaiseAccess
- EXECUTING AssignOutputElements
- EXECUTING CalculateCost
- EXECUTING PlanSorts
- EXECUTING CollapseSource
- CONVERTING PLAN TREE TO PROCESS TREE
- OPTIMIZATION COMPLETE
Detailed logical plan optimization log