@Override public Object evaluate(DeferredObject[] arguments) throws HiveException { Integer numMonthV; if (isNumMonthsConst) { numMonthV = numMonthsConst; } else { numMonthV = getIntValue(arguments, 1, tsConverters); } if (numMonthV == null) { return null; } int numMonthInt = numMonthV.intValue(); // the function should support both short date and full timestamp format // time part of the timestamp should not be skipped Timestamp ts = getTimestampValue(arguments, 0, tsConverters); if (ts != null) { addMonth(ts, numMonthInt); } else { Date date = getDateValue(arguments, 0, dtInputTypes, dtConverters); if (date != null) { addMonth(date, numMonthInt); } else { return null; } } String res = formatter.format(calendar.getTime()); output.set(res); return output; }
@Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { checkArgsSize(arguments, 2, 3); checkArgPrimitive(arguments, 0); checkArgPrimitive(arguments, 1); checkArgPrimitive(arguments, 2); checkArgGroups(arguments, 2, tsInputTypes, STRING_GROUP); String fmtStr = getConstantStringValue(arguments, 2); if (fmtStr != null) { formatter = new SimpleDateFormat(fmtStr); throw new UDFArgumentTypeException(2, getFuncName() + " only takes constant as " + getArgOrder(2) + " argument"); checkArgGroups(arguments, 0, tsInputTypes, STRING_GROUP, DATE_GROUP, VOID_GROUP); checkArgGroups(arguments, 0, dtInputTypes, STRING_GROUP, DATE_GROUP, VOID_GROUP); obtainTimestampConverter(arguments, 0, tsInputTypes, tsConverters); obtainDateConverter(arguments, 0, dtInputTypes, dtConverters); checkArgGroups(arguments, 1, tsInputTypes, NUMERIC_GROUP, VOID_GROUP); obtainIntConverter(arguments, 1, tsInputTypes, tsConverters); numMonthsConst = getConstantIntValue(arguments, 1); isNumMonthsConst = true;
@Override public String getDisplayString(String[] children) { return getStandardDisplayString(getFuncName(), children); }
@Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { checkArgsSize(arguments, 2, 2); checkArgPrimitive(arguments, 0); checkArgPrimitive(arguments, 1); checkArgGroups(arguments, 0, inputTypes, STRING_GROUP, DATE_GROUP, VOID_GROUP); checkArgGroups(arguments, 1, inputTypes, NUMERIC_GROUP, VOID_GROUP); obtainDateConverter(arguments, 0, inputTypes, converters); obtainIntConverter(arguments, 1, inputTypes, converters); if (arguments[1] instanceof ConstantObjectInspector) { numMonthsConst = getConstantIntValue(arguments, 1); isNumMonthsConst = true; } ObjectInspector outputOI = PrimitiveObjectInspectorFactory.writableStringObjectInspector; return outputOI; }
@Override public Object evaluate(DeferredObject[] arguments) throws HiveException { Integer numMonthV; if (isNumMonthsConst) { numMonthV = numMonthsConst; } else { numMonthV = getIntValue(arguments, 1, converters); } if (numMonthV == null) { return null; } int numMonthInt = numMonthV.intValue(); Date date = getDateValue(arguments, 0, inputTypes, converters); if (date == null) { return null; } addMonth(date, numMonthInt); Date newDate = calendar.getTime(); output.set(DateUtils.getDateFormat().format(newDate)); return output; }
private Calendar addMonth(int numMonths) { boolean lastDatOfMonth = isLastDayOfMonth(calendar); calendar.add(Calendar.MONTH, numMonths); if (lastDatOfMonth) { int maxDd = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, maxDd); } return calendar; }
private Calendar addMonth(Date d, int numMonths) { calendar.setTimeInMillis(d.toEpochMilli()); return addMonth(numMonths); }
@Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { checkArgsSize(arguments, 2, 2); checkArgPrimitive(arguments, 0); checkArgPrimitive(arguments, 1); checkArgGroups(arguments, 0, inputTypes, STRING_GROUP, DATE_GROUP, VOID_GROUP); checkArgGroups(arguments, 1, inputTypes, NUMERIC_GROUP, VOID_GROUP); obtainDateConverter(arguments, 0, inputTypes, converters); obtainIntConverter(arguments, 1, inputTypes, converters); if (arguments[1] instanceof ConstantObjectInspector) { numMonthsConst = getConstantIntValue(arguments, 1); isNumMonthsConst = true; } ObjectInspector outputOI = PrimitiveObjectInspectorFactory.writableStringObjectInspector; return outputOI; }
@Override public Object evaluate(DeferredObject[] arguments) throws HiveException { Integer numMonthV; if (isNumMonthsConst) { numMonthV = numMonthsConst; } else { numMonthV = getIntValue(arguments, 1, converters); } if (numMonthV == null) { return null; } int numMonthInt = numMonthV.intValue(); Date date = getDateValue(arguments, 0, inputTypes, converters); if (date == null) { return null; } addMonth(date, numMonthInt); Date newDate = calendar.getTime(); output.set(DateUtils.getDateFormat().format(newDate)); return output; }
protected Calendar addMonth(Date d, int numMonths) { calendar.setTime(d); boolean lastDatOfMonth = isLastDayOfMonth(calendar); calendar.add(Calendar.MONTH, numMonths); if (lastDatOfMonth) { int maxDd = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, maxDd); } return calendar; }
private Calendar addMonth(Timestamp ts, int numMonths) { calendar.setTimeInMillis(ts.toEpochMilli()); return addMonth(numMonths); }
@Override public String getDisplayString(String[] children) { return getStandardDisplayString(getFuncName(), children); }
protected Calendar addMonth(Date d, int numMonths) { calendar.setTime(d); boolean lastDatOfMonth = isLastDayOfMonth(calendar); calendar.add(Calendar.MONTH, numMonths); if (lastDatOfMonth) { int maxDd = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, maxDd); } return calendar; }
@Override public String getDisplayString(String[] children) { return getStandardDisplayString(getFuncName(), children); }