package brickhouse.udf.collect; /** * Copyright 2012 Klout, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDAF; import org.apache.hadoop.hive.ql.exec.UDAFEvaluator; @Description(name="group_first", value = "_FUNC_(x) - Returns first element in the aggregation group" ) public class FirstOfGroupUDAF extends UDAF { public static class FirstLongEvaluator implements UDAFEvaluator { private Long output; public FirstLongEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(Long value) { if (value != null && output == null) { output = value; } return true; } public Long terminatePartial() { return output; } public boolean merge(Long value) { if (value != null && output == null) { output = value; } return true; } public Long terminate() { return output; } } public static class FirstStringEvaluator implements UDAFEvaluator { private String output; public FirstStringEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(String value) { if (value != null && output == null) { output = value; } return true; } public String terminatePartial() { return output; } public boolean merge(String value) { if (value != null && output == null) { output = value; } return true; } public String terminate() { return output; } } public static class FirstFloatEvaluator implements UDAFEvaluator { private Float output; public FirstFloatEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(Float value) { if (value != null && output == null) { output = value; } return true; } public Float terminatePartial() { return output; } public boolean merge(Float value) { if (value != null && output == null) { output = value; } return true; } public Float terminate() { return output; } } public static class FirstDoubleEvaluator implements UDAFEvaluator { private Double output; public FirstDoubleEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(Double value) { if (value != null && output == null) { output = value; } return true; } public Double terminatePartial() { return output; } public boolean merge(Double value) { if (value != null && output == null) { output = value; } return true; } public Double terminate() { return output; } } public static class FirstIntEvaluator implements UDAFEvaluator { private Integer output; public FirstIntEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(Integer value) { if (value != null && output == null) { output = value; } return true; } public Integer terminatePartial() { return output; } public boolean merge(Integer value) { if (value != null && output == null) { output = value; } return true; } public Integer terminate() { return output; } } public static class FirstBooleanEvaluator implements UDAFEvaluator { private Boolean output; public FirstBooleanEvaluator() { super(); init(); } @Override public void init() { output = null; } public boolean iterate(Boolean value) { if (value != null && output == null) { output = value; } return true; } public Boolean terminatePartial() { return output; } public boolean merge(Boolean value) { if (value != null && output == null) { output = value; } return true; } public Boolean terminate() { return output; } } }