@Override public Object clone() { SelectDesc ret = new SelectDesc(); ret.setColList(getColList() == null ? null : new ArrayList<ExprNodeDesc>(getColList())); ret.setOutputColumnNames(getOutputColumnNames() == null ? null : new ArrayList<String>(getOutputColumnNames())); ret.setSelectStar(selectStar); ret.setSelStarNoCompute(selStarNoCompute); return ret; }
return null; // possible if all children have same expressions, but not likely. if (pSEL.getConf().isSelStarNoCompute()) { if (!cSEL.getConf().isSelStarNoCompute()) { Set<String> funcOutputs = getFunctionOutputs( pSEL.getConf().getOutputColumnNames(), pSEL.getConf().getColList()); List<ExprNodeDesc> cSELColList = cSEL.getConf().getColList(); List<String> cSELOutputColumnNames = cSEL.getConf().getOutputColumnNames(); if (!funcOutputs.isEmpty() && !checkReferences(cSELColList, funcOutputs)) { return null; pSEL.getConf().setColList(ExprNodeDescUtils.backtrack(cSELColList, cSEL, pSEL, true)); pSEL.getConf().setOutputColumnNames(cSELOutputColumnNames); } else { colExprMap.put(outputColumnName, newPSELExprNodeDesc); pSEL.getConf().setColList(newPSELColList); pSEL.getConf().setOutputColumnNames(newPSELOutputColumnNames); pSEL.setColumnExprMap(colExprMap); pSEL.getConf().setSelectStar(cSEL.getConf().isSelectStar());
@Override public boolean isSame(OperatorDesc other) { if (getClass().getName().equals(other.getClass().getName())) { SelectDesc otherDesc = (SelectDesc) other; return Objects.equals(getColListString(), otherDesc.getColListString()) && Objects.equals(getOutputColumnNames(), otherDesc.getOutputColumnNames()) && Objects.equals(explainNoCompute(), otherDesc.explainNoCompute()); } return false; }
private boolean checkExpressions(SelectOperator op) { SelectDesc desc = op.getConf(); if (desc.isSelectStar() || desc.isSelStarNoCompute()) { return true; } for (ExprNodeDesc expr : desc.getColList()) { if (!checkExpression(expr)) { return false; } } return true; }
if (op.getConf().isSelStarNoCompute()) { assert op.getNumChild() == 1; Operator<? extends OperatorDesc> child = op.getChildOperators().get(0); if (cols == null || conf.isSelStarNoCompute()) { return null; List<ExprNodeDesc> originalColList = op.getConf().getColList(); List<String> originalOutputColumnNames = conf.getOutputColumnNames(); conf.setColList(newColList); conf.setOutputColumnNames(newOutputColumnNames); handleChildren(op, toColumnNames(cols), cppCtx);
@Override protected void initializeOp(Configuration hconf) throws HiveException { super.initializeOp(hconf); // Just forward the row as is if (conf.isSelStarNoCompute()) { return; } List<ObjectInspector> objectInspectors = new ArrayList<ObjectInspector>(); List<ExprNodeDesc> colList = conf.getColList(); valueWriters = VectorExpressionWriterFactory.getExpressionWriters(colList); for (VectorExpressionWriter vew : valueWriters) { objectInspectors.add(vew.getObjectInspector()); } List<String> outputFieldNames = conf.getOutputColumnNames(); outputObjInspector = ObjectInspectorFactory.getStandardStructObjectInspector( outputFieldNames, objectInspectors); }
@Override public void process(Object row, int tag) throws HiveException { // Just forward the row as is if (conf.isSelStarNoCompute()) { vectorForward((VectorizedRowBatch) row); return; } VectorizedRowBatch vrg = (VectorizedRowBatch) row; for (int i = 0; i < vExpressions.length; i++) { try { vExpressions[i].evaluate(vrg); } catch (RuntimeException e) { throw new HiveException("Error evaluating " + conf.getColList().get(i).getExprString(), e); } } // Prepare output, set the projections int[] originalProjections = vrg.projectedColumns; int originalProjectionSize = vrg.projectionSize; vrg.projectionSize = projectedOutputColumns.length; vrg.projectedColumns = this.projectedOutputColumns; vectorForward((VectorizedRowBatch) row); // Revert the projected columns back, because vrg will be re-used. vrg.projectionSize = originalProjectionSize; vrg.projectedColumns = originalProjections; }
cppCtx.getOpToConstantExprs().put(op, constants); foldOperator(op, cppCtx); List<ExprNodeDesc> colList = op.getConf().getColList(); List<String> columnNames = op.getConf().getOutputColumnNames(); Map<String, ExprNodeDesc> columnExprMap = op.getColumnExprMap(); if (colList != null) {
private Operator genSelectAllDesc(Operator input) throws SemanticException { OpParseContext inputCtx = opParseCtx.get(input); RowResolver inputRR = inputCtx.getRowResolver(); ArrayList<ColumnInfo> columns = inputRR.getColumnInfos(); ArrayList<ExprNodeDesc> colList = new ArrayList<ExprNodeDesc>(); ArrayList<String> columnNames = new ArrayList<String>(); Map<String, ExprNodeDesc> columnExprMap = new HashMap<String, ExprNodeDesc>(); for (int i = 0; i < columns.size(); i++) { ColumnInfo col = columns.get(i); colList.add(new ExprNodeColumnDesc(col, true)); columnNames.add(col.getInternalName()); columnExprMap.put(col.getInternalName(), new ExprNodeColumnDesc(col, true)); } RowResolver outputRR = inputRR.duplicate(); Operator output = putOpInsertMap(OperatorFactory.getAndMakeChild( new SelectDesc(colList, columnNames, true), outputRR.getRowSchema(), input), outputRR); output.setColumnExprMap(columnExprMap); return output; }
((SelectDesc)select.getConf()).setSelStarNoCompute(false); ((SelectDesc)select.getConf()).setColList(colList); ((SelectDesc)select.getConf()).setOutputColumnNames(toColumnNames(outputCols)); pruneOperator(ctx, select, outputCols);
VectorizationContext vc = new VectorizationContext("name", columns); SelectDesc selDesc = new SelectDesc(false); List<ExprNodeDesc> colList = new ArrayList<ExprNodeDesc>(); ExprNodeColumnDesc colDesc1 = new ExprNodeColumnDesc(Long.class, "a", "table", false); selDesc.setColList(colList); selDesc.setOutputColumnNames(outputColNames); List<ExprNodeDesc> selectColList = selDesc.getColList(); VectorExpression[] vectorSelectExprs = new VectorExpression[selectColList.size()]; for (int i = 0; i < selectColList.size(); i++) {
@Override public Object process(Node n, Stack<Node> s, NodeProcessorCtx c, Object... os) { @SuppressWarnings({ "unchecked" }) List<ExprNodeDesc> exprs = ((Operator<SelectDesc>) n).getConf().getColList(); Boolean retval = new Boolean(checkExpressions(exprs)); if (!retval) { LOG.info("Cannot run select operator [" + n + "] in llap mode"); } return new Boolean(retval); } });
private SelectOperator buildSelectOperator( List<ExprNodeDesc> colList, List<FieldNode> outputCols) { SelectOperator selectOperator = mock(SelectOperator.class); SelectDesc selectDesc = new SelectDesc(colList, ColumnPrunerProcCtx.toColumnNames(outputCols)); selectDesc.setSelStarNoCompute(false); when(selectOperator.getConf()).thenReturn(selectDesc); return selectOperator; } }
stats.setColumnStats(colStats); if (!sop.getConf().isSelectStar() && !sop.getConf().isSelStarNoCompute()) { long dataSize = StatsUtils.getDataSizeFromColumnStats(stats.getNumRows(), colStats); stats.setDataSize(dataSize);
public VectorSelectOperator(CompilationOpContext ctx, VectorizationContext vContext, OperatorDesc conf) throws HiveException { this(ctx); this.conf = (SelectDesc) conf; vectorDesc = (VectorSelectDesc) this.conf.getVectorDesc(); vExpressions = vectorDesc.getSelectExpressions(); projectedOutputColumns = vectorDesc.getProjectedOutputColumns(); /** * Create a new vectorization context to create a new projection, but keep * same output column manager must be inherited to track the scratch the columns. */ vOutContext = new VectorizationContext(getName(), vContext); vOutContext.resetProjectionColumns(); List<String> outputColumnNames = this.conf.getOutputColumnNames(); for (int i=0; i < projectedOutputColumns.length; ++i) { String columnName = outputColumnNames.get(i); vOutContext.addProjectionColumn(columnName, projectedOutputColumns[i]); } }
public static Operator<? extends OperatorDesc> vectorizeSelectOperator( Operator<? extends OperatorDesc> selectOp, VectorizationContext vContext) throws HiveException { SelectDesc selectDesc = (SelectDesc) selectOp.getConf(); VectorSelectDesc vectorSelectDesc = new VectorSelectDesc(); selectDesc.setVectorDesc(vectorSelectDesc); List<ExprNodeDesc> colList = selectDesc.getColList(); int index = 0; final int size = colList.size(); VectorExpression[] vectorSelectExprs = new VectorExpression[size]; int[] projectedOutputColumns = new int[size]; for (int i = 0; i < size; i++) { ExprNodeDesc expr = colList.get(i); VectorExpression ve = vContext.getVectorExpression(expr); projectedOutputColumns[i] = ve.getOutputColumn(); if (ve instanceof IdentityExpression) { // Suppress useless evaluation. continue; } vectorSelectExprs[index++] = ve; } if (index < size) { vectorSelectExprs = Arrays.copyOf(vectorSelectExprs, index); } vectorSelectDesc.setSelectExpressions(vectorSelectExprs); vectorSelectDesc.setProjectedOutputColumns(projectedOutputColumns); return OperatorFactory.getVectorOperator( selectOp.getCompilationOpContext(), selectDesc, vContext, selectOp); }
public VectorSelectOperator(CompilationOpContext ctx, OperatorDesc conf, VectorizationContext vContext, VectorDesc vectorDesc) throws HiveException { this(ctx); this.conf = (SelectDesc) conf; this.vContext = vContext; this.vectorDesc = (VectorSelectDesc) vectorDesc; vExpressions = this.vectorDesc.getSelectExpressions(); projectedOutputColumns = this.vectorDesc.getProjectedOutputColumns(); /** * Create a new vectorization context to create a new projection, but keep * same output column manager must be inherited to track the scratch the columns. * Some of which may be the input columns for this operator. */ vOutContext = new VectorizationContext(getName(), vContext); // NOTE: We keep the TypeInfo and dataTypePhysicalVariation arrays. vOutContext.resetProjectionColumns(); List<String> outputColumnNames = this.conf.getOutputColumnNames(); for (int i=0; i < projectedOutputColumns.length; ++i) { String columnName = outputColumnNames.get(i); vOutContext.addProjectionColumn(columnName, projectedOutputColumns[i]); } }
@Explain(displayName = "SELECT * ") public String explainNoCompute() { if (isSelStarNoCompute()) { return "(no compute)"; } else { return null; } }
if (op.getConf().isSelStarNoCompute()) { assert op.getNumChild() == 1; Operator<? extends OperatorDesc> child = op.getChildOperators().get(0); if (cols == null || conf.isSelStarNoCompute()) { return null; List<ExprNodeDesc> originalColList = op.getConf().getColList(); List<String> originalOutputColumnNames = conf.getOutputColumnNames(); conf.setColList(newColList); conf.setOutputColumnNames(newOutputColumnNames); handleChildren(op, toColumnNames(cols), cppCtx);
@Override protected void initializeOp(Configuration hconf) throws HiveException { super.initializeOp(hconf); // Just forward the row as is if (conf.isSelStarNoCompute()) { return; } VectorExpression.doTransientInit(vExpressions); List<ObjectInspector> objectInspectors = new ArrayList<ObjectInspector>(); List<ExprNodeDesc> colList = conf.getColList(); valueWriters = VectorExpressionWriterFactory.getExpressionWriters(colList); for (VectorExpressionWriter vew : valueWriters) { objectInspectors.add(vew.getObjectInspector()); } List<String> outputFieldNames = conf.getOutputColumnNames(); outputObjInspector = ObjectInspectorFactory.getStandardStructObjectInspector( outputFieldNames, objectInspectors); }