package com.livingsocial.hive.udf; import com.livingsocial.hive.Utils; import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFMin; import org.apache.hadoop.hive.ql.exec.UDAF; import org.apache.hadoop.hive.ql.exec.UDAFEvaluator; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.io.Text; @Description( name = "smin", value = "_FUNC_(expr) - Returns the minimum value of expr, treating strings as dates" ) public class SMin extends GenericUDAFMin { static public class SMinStringEvaluator implements UDAFEvaluator { private Text mMin; private boolean mEmpty; public SMinStringEvaluator() { super(); init(); } public void init() { mMin = null; mEmpty = true; } public boolean iterate(Text o) { if (o != null) { if (mEmpty) { mMin = new Text(o); mEmpty = false; } else if (Utils.stringToTimestamp(mMin.toString()) > Utils.stringToTimestamp(o.toString())) { mMin.set(o); } } return true; } public Text terminatePartial() { return mEmpty ? null : mMin; } public boolean merge(Text o) { return iterate(o); } public Text terminate() { return mEmpty ? null : mMin; } } }