public VectorizationContext(String contextName, List<String> initialColumnNames, HiveConf hiveConf) { this.contextName = contextName; level = 0; this.initialColumnNames = initialColumnNames; this.projectionColumnNames = initialColumnNames; projectedColumns = new ArrayList<Integer>(); projectionColumnMap = new HashMap<String, Integer>(); for (int i = 0; i < this.projectionColumnNames.size(); i++) { projectedColumns.add(i); projectionColumnMap.put(projectionColumnNames.get(i), i); } int firstOutputColumnIndex = projectedColumns.size(); this.ocm = new OutputColumnManager(firstOutputColumnIndex); this.firstOutputColumnIndex = firstOutputColumnIndex; vMap = new VectorExpressionDescriptor(); if (hiveConf != null) { setHiveConfVars(hiveConf); } }
int scratchBytesCol = ocm.allocateOutputColumn(TypeInfoFactory.stringTypeInfo);
String resultTypeName = expr.getTypeInfo().getTypeName(); outputCol = ocm.allocateOutputColumn(expr.getTypeInfo()); ocm.freeOutputColumn(i);
String resultTypeName = expr.getTypeInfo().getTypeName(); outputCol = ocm.allocateOutputColumn(resultTypeName); ocm.freeOutputColumn(i);
outCol = ocm.allocateOutputColumn(typeName);
outType = ((VectorExpression) vclass.newInstance()).getOutputType(); int outputCol = ocm.allocateOutputColumn(outType); newArgs = Arrays.copyOf(args, numParams); newArgs[numParams-1] = outputCol;
} finally { for (VectorExpression ve : children) { ocm.freeOutputColumn(ve.getOutputColumn());
private VectorExpression getCastToBoolean(List<ExprNodeDesc> childExpr) throws HiveException { ExprNodeDesc child = childExpr.get(0); String inputType = childExpr.get(0).getTypeString(); if (child instanceof ExprNodeConstantDesc) { if (null == ((ExprNodeConstantDesc)child).getValue()) { return getConstantVectorExpression(null, TypeInfoFactory.booleanTypeInfo, Mode.PROJECTION); } // Don't do constant folding here. Wait until the optimizer is changed to do it. // Family of related JIRAs: HIVE-7421, HIVE-7422, and HIVE-7424. return null; } // Long and double are handled using descriptors, string needs to be specially handled. if (isStringFamily(inputType)) { // string casts to false if it is 0 characters long, otherwise true VectorExpression lenExpr = createVectorExpression(StringLength.class, childExpr, Mode.PROJECTION, null); int outputCol = ocm.allocateOutputColumn("Long"); VectorExpression lenToBoolExpr = new CastLongToBooleanViaLongToLong(lenExpr.getOutputColumn(), outputCol); lenToBoolExpr.setChildExpressions(new VectorExpression[] {lenExpr}); ocm.freeOutputColumn(lenExpr.getOutputColumn()); return lenToBoolExpr; } // cast(booleanExpr as boolean) case is omitted because planner removes it as a no-op return null; }
private VectorExpression getCoalesceExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType) throws HiveException { int[] inputColumns = new int[childExpr.size()]; VectorExpression[] vectorChildren = null; try { vectorChildren = getVectorExpressions(childExpr, Mode.PROJECTION); int i = 0; for (VectorExpression ve : vectorChildren) { inputColumns[i++] = ve.getOutputColumn(); } int outColumn = ocm.allocateOutputColumn(returnType.getTypeName()); VectorCoalesce vectorCoalesce = new VectorCoalesce(inputColumns, outColumn); vectorCoalesce.setOutputType(returnType.getTypeName()); vectorCoalesce.setChildExpressions(vectorChildren); return vectorCoalesce; } finally { // Free the output columns of the child expressions. if (vectorChildren != null) { for (VectorExpression v : vectorChildren) { ocm.freeOutputColumn(v.getOutputColumn()); } } } }
private VectorExpression getEltExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType) throws HiveException { int[] inputColumns = new int[childExpr.size()]; VectorExpression[] vectorChildren = null; try { vectorChildren = getVectorExpressions(childExpr, Mode.PROJECTION); int i = 0; for (VectorExpression ve : vectorChildren) { inputColumns[i++] = ve.getOutputColumn(); } int outColumn = ocm.allocateOutputColumn(returnType.getTypeName()); VectorElt vectorElt = new VectorElt(inputColumns, outColumn); vectorElt.setOutputType(returnType.getTypeName()); vectorElt.setChildExpressions(vectorChildren); return vectorElt; } finally { // Free the output columns of the child expressions. if (vectorChildren != null) { for (VectorExpression v : vectorChildren) { ocm.freeOutputColumn(v.getOutputColumn()); } } } }
public VectorizationContext(String contextName, List<String> initialColumnNames) { this.contextName = contextName; level = 0; LOG.info("VectorizationContext consructor contextName " + contextName + " level " + level + " initialColumnNames " + initialColumnNames.toString()); this.projectionColumnNames = initialColumnNames; projectedColumns = new ArrayList<Integer>(); projectionColumnMap = new HashMap<String, Integer>(); for (int i = 0; i < this.projectionColumnNames.size(); i++) { projectedColumns.add(i); projectionColumnMap.put(projectionColumnNames.get(i), i); } int firstOutputColumnIndex = projectedColumns.size(); this.ocm = new OutputColumnManager(firstOutputColumnIndex); this.firstOutputColumnIndex = firstOutputColumnIndex; vMap = new VectorExpressionDescriptor(); }
public int[] currentScratchColumns() { return ocm.currentScratchColumns(); }
public int allocateScratchColumn(String hiveTypeName) { return ocm.allocateOutputColumn(hiveTypeName); }
int allocateOutputColumn(String hiveTypeName) { if (initialOutputCol < 0) { // This is a test return 0; } // We need to differentiate DECIMAL columns by their precision and scale... String normalizedTypeName = getNormalizedName(hiveTypeName); int relativeCol = allocateOutputColumnInternal(normalizedTypeName); // LOG.info("allocateOutputColumn for hiveTypeName " + hiveTypeName + " column " + (initialOutputCol + relativeCol)); return initialOutputCol + relativeCol; }
public void finishedAddingInitialColumns() { int firstOutputColumnIndex = projectedColumns.size(); this.ocm = new OutputColumnManager(firstOutputColumnIndex); this.firstOutputColumnIndex = firstOutputColumnIndex; }
public VectorizationContext(String contextName) { this.contextName = contextName; level = 0; LOG.info("VectorizationContext consructor contextName " + contextName + " level " + level); projectedColumns = new ArrayList<Integer>(); projectionColumnNames = new ArrayList<String>(); projectionColumnMap = new HashMap<String, Integer>(); this.ocm = new OutputColumnManager(0); this.firstOutputColumnIndex = 0; vMap = new VectorExpressionDescriptor(); }
final int outputColumnNum = ocm.allocateOutputColumn(returnType); getVectorExpression(elseDesc, VectorExpressionDescriptor.Mode.PROJECTION); final int outputColumnNum = ocm.allocateOutputColumn(returnType); getVectorExpression(thenDesc, VectorExpressionDescriptor.Mode.PROJECTION); final int outputColumnNum = ocm.allocateOutputColumn(returnType); final int outputColumnNum = ocm.allocateOutputColumn(returnType);
int scratchBytesCol = ocm.allocateOutputColumn(TypeInfoFactory.stringTypeInfo);
String resultTypeName = resultTypeInfo.getTypeName(); final int outputColumnNum = ocm.allocateOutputColumn(expr.getTypeInfo()); ocm.freeOutputColumn(i);
int outputCol = ocm.allocateOutputColumn(returnType);