Search in sources :

Example 1 with HiveRelColumnsAlignment

use of org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRelColumnsAlignment in project hive by apache.

the class PlanModifierForASTConv method convertOpTree.

public static RelNode convertOpTree(RelNode rel, List<FieldSchema> resultSchema, boolean alignColumns) throws CalciteSemanticException {
    RelNode newTopNode = rel;
    if (LOG.isDebugEnabled()) {
        LOG.debug("Original plan for PlanModifier\n " + RelOptUtil.toString(newTopNode));
    }
    if (!(newTopNode instanceof Project) && !(newTopNode instanceof Sort)) {
        newTopNode = introduceDerivedTable(newTopNode);
        if (LOG.isDebugEnabled()) {
            LOG.debug("Plan after top-level introduceDerivedTable\n " + RelOptUtil.toString(newTopNode));
        }
    }
    convertOpTree(newTopNode, (RelNode) null);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Plan after nested convertOpTree\n " + RelOptUtil.toString(newTopNode));
    }
    if (alignColumns) {
        HiveRelColumnsAlignment propagator = new HiveRelColumnsAlignment(HiveRelFactories.HIVE_BUILDER.create(newTopNode.getCluster(), null));
        newTopNode = propagator.align(newTopNode);
        if (LOG.isDebugEnabled()) {
            LOG.debug("Plan after propagating order\n " + RelOptUtil.toString(newTopNode));
        }
    }
    Pair<RelNode, RelNode> topSelparentPair = HiveCalciteUtil.getTopLevelSelect(newTopNode);
    PlanModifierUtil.fixTopOBSchema(newTopNode, topSelparentPair, resultSchema, true);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Plan after fixTopOBSchema\n " + RelOptUtil.toString(newTopNode));
    }
    topSelparentPair = HiveCalciteUtil.getTopLevelSelect(newTopNode);
    newTopNode = renameTopLevelSelectInResultSchema(newTopNode, topSelparentPair, resultSchema);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Final plan after modifier\n " + RelOptUtil.toString(newTopNode));
    }
    return newTopNode;
}
Also used : Project(org.apache.calcite.rel.core.Project) HiveProject(org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject) HiveRelColumnsAlignment(org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRelColumnsAlignment) RelNode(org.apache.calcite.rel.RelNode) Sort(org.apache.calcite.rel.core.Sort)

Aggregations

RelNode (org.apache.calcite.rel.RelNode)1 Project (org.apache.calcite.rel.core.Project)1 Sort (org.apache.calcite.rel.core.Sort)1 HiveProject (org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject)1 HiveRelColumnsAlignment (org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRelColumnsAlignment)1