@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        DateTimeFormatter dateTimeFormatter = DT_FORMATTER_MAP.get(intervalType);

        String dateStr = parameter;
        if (dateParser != null) {
            Object dateObj = dateParser.parse(sourceData, rowIndex, context);
            if (dateObj == null) {
                return null;
            }
            dateStr = OperatorTools.parseString(dateObj);
        }

        int factor = 1;
        if (dateTimeFormatter == null) {
            if ("WEEK".equals(intervalType)) {
                dateTimeFormatter = DT_FORMATTER_MAP.get("DAY");
                factor = 7;
            } else if ("QUARTER".equals(intervalType)) {
                dateTimeFormatter = DT_FORMATTER_MAP.get("MONTH");
                factor = 3;
            } else {
                return null;
            }
        }

        try {
            factor = dateStr.charAt(0) == '-' ? -factor : factor;
            if (factor < 0) {
                dateStr = dateStr.substring(1);
            }
            return DateUtil.parseIntervalInfo(dateTimeFormatter, dateStr, factor);
        } catch (Exception e) {
            log.error("Interval parse error", e);
            return null;
        }
    }
IntervalParser  <-> INTERVAL expr unit ->  IntervalInfo:
<p>
`factor`:
<p>
   1) `expr` can accept strings starting with '-', representing the meaning of subtraction.
      So the positive or negative sign of `factor` indicates whether `expr` starts with a '-' or not.
<p>
   2) For units like WEEK and QUARTER, it is not easy to parse,
      so WEEK -> ( unit=DAY, adb(factor)=7 ); QUARTER -> ( unit=MONTH, adb(factor)=3 ).
<p>
`Map(ChronoField,Count)`:
<p>
   IntervalParser will automatically match the corresponding DateTimeFormatter based on the input `expr`,
   Based on DateTimeFormatter, IntervalParser will parse the incoming units and store them in a Map.
<p>

 In addition,acceptable expression parsing and specifying parameters in two ways:
     1) interval rowName year -> expression
     3) interval 2 year       -> fixed parameter
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/parser/IntervalParser.java