@Override
    public Object dispatch(Node nd, Stack<Node> stack, Object... nodeOutputs)
        throws SemanticException {
      Task<?> currTask = (Task<?>) nd;
      if (currTask instanceof MapRedTask) {
        MapredWork mapredWork = ((MapRedTask) currTask).getWork();

        MapWork mapWork = mapredWork.getMapWork();
        setMapWorkExplainConditions(mapWork);
        convertMapWork(mapredWork.getMapWork(), /* isTez */ false);
        logMapWorkExplainVectorization(mapWork);

        ReduceWork reduceWork = mapredWork.getReduceWork();
        if (reduceWork != null) {

          // Always set the EXPLAIN conditions.
          setReduceWorkExplainConditions(reduceWork);

          // We do not vectorize MR Reduce.

          logReduceWorkExplainVectorization(reduceWork);
        }
      } else if (currTask instanceof TezTask) {
        TezWork work = ((TezTask) currTask).getWork();
        for (BaseWork baseWork: work.getAllWork()) {
          if (baseWork instanceof MapWork) {
            MapWork mapWork = (MapWork) baseWork;
            setMapWorkExplainConditions(mapWork);
            convertMapWork(mapWork, /* isTez */ true);
            logMapWorkExplainVectorization(mapWork);
          } else if (baseWork instanceof ReduceWork) {
            ReduceWork reduceWork = (ReduceWork) baseWork;

            // Always set the EXPLAIN conditions.
            setReduceWorkExplainConditions(reduceWork);

            // We are only vectorizing Reduce under Tez.
            if (isReduceVectorizationEnabled) {
              convertReduceWork(reduceWork);
            }

            logReduceWorkExplainVectorization(reduceWork);
          } else if (baseWork instanceof MergeJoinWork){
            MergeJoinWork mergeJoinWork = (MergeJoinWork) baseWork;

            // Always set the EXPLAIN conditions.
            setMergeJoinWorkExplainConditions(mergeJoinWork);

            logMergeJoinWorkExplainVectorization(mergeJoinWork);
          }
        }
      } else if (currTask instanceof FetchTask) {
        LOG.info("Vectorizing Fetch not supported");
      } else {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Ignoring vectorization of " + currTask.getClass().getSimpleName());
        }
      }

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