private boolean validateAndVectorizeReduceOperators(ReduceWork reduceWork,
        VectorTaskColumnInfo vectorTaskColumnInfo)
            throws SemanticException {

      LOG.info("Validating and vectorizing ReduceWork... (vectorizedVertexNum " + vectorizedVertexNum + ")");

      Operator<? extends OperatorDesc> newVectorReducer;
      try {
        newVectorReducer =
            validateAndVectorizeReduceOperators(reduceWork.getReducer(), vectorTaskColumnInfo);
      } catch (VectorizerCannotVectorizeException e) {

        // The "not vectorized" information has been stored in the MapWork vertex.
        return false;
      } catch (NullPointerException e) {
        if (!isTestVectorizerSuppressFatalExceptions) {
          // Re-throw without losing original stack trace.
          throw e;
        }
        setNodeIssue("exception: " + VectorizationContext.getStackTraceAsSingleLine(e));
        return false;
      } catch (ClassCastException e) {
        if (!isTestVectorizerSuppressFatalExceptions) {
          throw e;
        }
        setNodeIssue("exception: " + VectorizationContext.getStackTraceAsSingleLine(e));
        return false;
      } catch (RuntimeException e) {
        if (!isTestVectorizerSuppressFatalExceptions) {
          throw e;
        }
        setNodeIssue("exception: " + VectorizationContext.getStackTraceAsSingleLine(e));
        return false;
      }

      /*
       * The scratch column information was collected by the task VectorizationContext.  Go get it.
       */
      VectorizationContext vContext =
          ((VectorizationOperator) newVectorReducer).getInputVectorizationContext();

      vectorTaskColumnInfo.setScratchTypeNameArray(
          vContext.getScratchColumnTypeNames());
      vectorTaskColumnInfo.setScratchdataTypePhysicalVariationsArray(
          vContext.getScratchDataTypePhysicalVariations());

      // Replace the reducer with our fully vectorized reduce operator tree.
      reduceWork.setReducer(newVectorReducer);

      return true;
    }
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