private void vectorizeTableScanOperatorInPlace(TableScanOperator tableScanOperator,
        VectorTaskColumnInfo vectorTaskColumnInfo) {

      TableScanDesc tableScanDesc = tableScanOperator.getConf();
      VectorTableScanDesc vectorTableScanDesc = new VectorTableScanDesc();
      tableScanDesc.setVectorDesc(vectorTableScanDesc);

      VectorizationContext vContext =
          ((VectorizationContextRegion) tableScanOperator).getOutputVectorizationContext();
      List<Integer> projectedColumns = vContext.getProjectedColumns();
      vectorTableScanDesc.setProjectedColumns(
          ArrayUtils.toPrimitive(projectedColumns.toArray(new Integer[0])));
      List<String> allColumnNameList = vectorTaskColumnInfo.allColumnNames;
      List<TypeInfo> allTypeInfoList = vectorTaskColumnInfo.allTypeInfos;
      List<DataTypePhysicalVariation> allDataTypePhysicalVariationList = vectorTaskColumnInfo.allDataTypePhysicalVariations;
      final int projectedColumnCount = projectedColumns.size();
      String[] projectedDataColumnNames = new String[projectedColumnCount];
      TypeInfo[] projectedDataColumnTypeInfos = new TypeInfo[projectedColumnCount];
      DataTypePhysicalVariation[] projectedDataColumnDataTypePhysicalVariation =
          new DataTypePhysicalVariation[projectedColumnCount];
      for (int i = 0; i < projectedColumnCount; i++) {
        final int projectedColumnNum = projectedColumns.get(i);
        projectedDataColumnNames[i] = allColumnNameList.get(projectedColumnNum);
        projectedDataColumnTypeInfos[i] = allTypeInfoList.get(projectedColumnNum);
        projectedDataColumnDataTypePhysicalVariation[i] = allDataTypePhysicalVariationList.get(projectedColumnNum);
      }
      vectorTableScanDesc.setProjectedColumnNames(projectedDataColumnNames);
      vectorTableScanDesc.setProjectedColumnTypeInfos(projectedDataColumnTypeInfos);
      vectorTableScanDesc.setProjectedColumnDataTypePhysicalVariations(projectedDataColumnDataTypePhysicalVariation);

      tableScanOperator.getConf().setVectorized(true);

      List<Operator<? extends OperatorDesc>> children = tableScanOperator.getChildOperators();
      while (children.size() > 0) {
        children = dosetVectorDesc(children);
      }
    }
Decimal types can be specified with different precision and scales e.g. decimal(10,5),
as opposed to other data types which can be represented by constant strings.
The regex matches only the {@link serdeConstants#DECIMAL_TYPE_NAME} prefix of the type.
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java