private static boolean areBacktrackedExprsCompatible(final List<ExprNodeDesc> orgexprs, final List<ExprNodeDesc> backtrackedExprs) { if(backtrackedExprs == null || backtrackedExprs.size() != orgexprs.size()) { return false; } for(int i=0; i<orgexprs.size(); i++) { if(orgexprs.get(i) instanceof ExprNodeColumnDesc && backtrackedExprs.get(i) instanceof ExprNodeColumnDesc) { ExprNodeColumnDesc orgColExpr = (ExprNodeColumnDesc)orgexprs.get(i); ExprNodeColumnDesc backExpr = (ExprNodeColumnDesc)backtrackedExprs.get(i); String orgTabAlias = orgColExpr.getTabAlias(); String backTabAlias = backExpr.getTabAlias(); if(orgTabAlias != null && backTabAlias != null && !orgTabAlias.equals(backTabAlias)) { return false; } } } return true; }
!s.contains(((ExprNodeColumnDesc)en).getTabAlias())) { return false; s.add(((ExprNodeColumnDesc)en).getTabAlias()); s.add(((ExprNodeColumnDesc) cn).getTabAlias()); } else if (!(cn instanceof ExprNodeConstantDesc)) { if (!getTableAliasHelper(cn, s, visited)) {
private InputCtx getInputCtx(ExprNodeColumnDesc col) throws SemanticException { InputCtx ctxLookingFor = null; if (inputCtxs.size() == 1 && inputCtxs.get(0).hiveRR == null) { ctxLookingFor = inputCtxs.get(0); } else { String tableAlias = col.getTabAlias(); String colAlias = col.getColumn(); int noInp = 0; for (InputCtx ic : inputCtxs) { if (tableAlias == null || ic.hiveRR.hasTableAlias(tableAlias)) { if (ic.hiveRR.getPosition(colAlias) >= 0) { ctxLookingFor = ic; noInp++; } } } if (noInp > 1) { throw new RuntimeException("Ambiguous column mapping"); } } return ctxLookingFor; }
!s.contains(((ExprNodeColumnDesc)en).getTabAlias())) { return false; s.add(((ExprNodeColumnDesc)en).getTabAlias()); s.add(((ExprNodeColumnDesc) cn).getTabAlias()); } else if (!(cn instanceof ExprNodeConstantDesc)) { if (!getTableAliasHelper(cn, s, visited)) {
@Override public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx procCtx, Object... nodeOutputs) throws SemanticException { ExprNodeColumnDesc cd = (ExprNodeColumnDesc) nd; PcrExprProcCtx epc = (PcrExprProcCtx) procCtx; if (cd.getTabAlias().equalsIgnoreCase(epc.getTabAlias()) && cd.getIsPartitionColOrVirtualCol() && !VirtualColumn.VIRTUAL_COLUMN_NAMES.contains(cd.getColumn().toUpperCase())) { return new NodeInfoWrapper(WalkState.PART_COL, null, cd); } else { return new NodeInfoWrapper(WalkState.UNKNOWN, null, cd); } } }
@Override public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx procCtx, Object... nodeOutputs) throws SemanticException { ExprNodeColumnDesc cd = (ExprNodeColumnDesc) nd; PcrExprProcCtx epc = (PcrExprProcCtx) procCtx; if (cd.getTabAlias().equalsIgnoreCase(epc.getTabAlias()) && cd.getIsPartitionColOrVirtualCol()) { return new NodeInfoWrapper(WalkState.PART_COL, null, cd); } else { return new NodeInfoWrapper(WalkState.UNKNOWN, null, cd); } } }
@Override protected ExprNodeDesc processColumnDesc(NodeProcessorCtx procCtx, ExprNodeColumnDesc cd) { ExprNodeDesc newcd; ExprProcCtx epc = (ExprProcCtx) procCtx; if (cd.getTabAlias().equalsIgnoreCase(epc.getTabAlias()) && cd.getIsPartitionColOrVirtualCol()) { newcd = cd.clone(); } else { newcd = new ExprNodeConstantDesc(cd.getTypeInfo(), null); } return newcd; } }
@Override protected ExprNodeDesc processColumnDesc(NodeProcessorCtx procCtx, ExprNodeColumnDesc cd) { ExprNodeDesc newcd; ExprProcCtx epc = (ExprProcCtx) procCtx; if (cd.getTabAlias().equalsIgnoreCase(epc.getTabAlias()) && cd.getIsPartitionColOrVirtualCol()) { newcd = cd.clone(); } else { newcd = new ExprNodeConstantDesc(cd.getTypeInfo(), null); } return newcd; } }
/** * Get ColumnInfo from column expression. * * @param rr * @param desc * @return */ public static ColumnInfo resolveColumn(RowSchema rs, ExprNodeColumnDesc desc) { ColumnInfo ci = rs.getColumnInfo(desc.getTabAlias(), desc.getColumn()); if (ci == null) { ci = rs.getColumnInfo(desc.getColumn()); } if (ci == null) { return null; } return ci; }
LOG.error("Reverse look up of column " + desc + " error!"); ci = rs.getColumnInfo(desc.getTabAlias(), desc.getColumn()); LOG.error("Can't resolve " + desc.getTabAlias() + "." + desc.getColumn());
@Override protected ExprNodeDesc processColumnDesc(NodeProcessorCtx procCtx, ExprNodeColumnDesc cd) { ExprNodeDesc newcd; LBExprProcCtx ctx = (LBExprProcCtx) procCtx; Partition part = ctx.getPart(); if (cd.getTabAlias().equalsIgnoreCase(ctx.getTabAlias()) && isPruneForListBucketing(part, cd.getColumn())) { newcd = cd.clone(); } else { newcd = new ExprNodeConstantDesc(cd.getTypeInfo(), null); } return newcd; }
/** * Get ColumnInfo from column expression. * * @param rr * @param desc * @return */ public static ColumnInfo resolveColumn(RowSchema rs, ExprNodeColumnDesc desc) { ColumnInfo ci = rs.getColumnInfo(desc.getTabAlias(), desc.getColumn()); if (ci == null) { ci = rs.getColumnInfo(desc.getColumn()); } if (ci == null) { return null; } return ci; }
@Override protected ExprNodeDesc processColumnDesc(NodeProcessorCtx procCtx, ExprNodeColumnDesc cd) { ExprNodeDesc newcd; LBExprProcCtx ctx = (LBExprProcCtx) procCtx; Partition part = ctx.getPart(); if (cd.getTabAlias().equalsIgnoreCase(ctx.getTabAlias()) && isPruneForListBucketing(part, cd.getColumn())) { newcd = cd.clone(); } else { newcd = new ExprNodeConstantDesc(cd.getTypeInfo(), null); } return newcd; }
private InputCtx getInputCtx(ExprNodeColumnDesc col) throws SemanticException { InputCtx ctxLookingFor = null; if (inputCtxs.size() == 1 && inputCtxs.get(0).hiveRR == null) { ctxLookingFor = inputCtxs.get(0); } else { String tableAlias = col.getTabAlias(); String colAlias = col.getColumn(); int noInp = 0; for (InputCtx ic : inputCtxs) { if (tableAlias == null || ic.hiveRR.hasTableAlias(tableAlias)) { if (ic.hiveRR.getPosition(colAlias) >= 0) { ctxLookingFor = ic; noInp++; } } } if (noInp > 1) throw new RuntimeException("Ambiguous column mapping"); } return ctxLookingFor; }
String internalName = col.getColumn(); String alias = internalName; String tabAlias = col.getTabAlias(); ColumnInfo ci = rs.getColumnInfo(internalName); if (ci != null) {
if (schema.getTableNames().contains(parentCol.getTabAlias())) { parentOp = currParent; break;
if (parentCol != null) { for (Operator<?> currParent : op.getParentOperators()) { if (currParent.getSchema().getTableNames().contains(parentCol.getTabAlias())) { parentOp = currParent; break;
return new ExprNodeColumnDesc(source.getTypeInfo(), newColumn, column.getTabAlias(), false);
return new ExprNodeColumnDesc(source.getTypeInfo(), newColumn, column.getTabAlias(), false);
tabAlias = column.getTabAlias();