| /* |
| * Copyright 2018, Oath Inc. |
| * Licensed under the terms of the Apache License 2.0. See LICENSE file at the project root for terms. |
| */ |
| |
| package com.yahoo.sketches.hive.kll; |
| |
| import org.apache.hadoop.hive.ql.exec.Description; |
| import org.apache.hadoop.hive.ql.exec.UDFArgumentException; |
| import org.apache.hadoop.hive.ql.metadata.HiveException; |
| import org.apache.hadoop.hive.ql.parse.SemanticException; |
| import org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver; |
| import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator; |
| import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFParameterInfo; |
| import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; |
| import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory; |
| import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils; |
| |
| @Description(name = "UnionSketch", value = "_FUNC_(sketch) - " |
| + "Returns a KllFloatsSketch in a serialized form as a binary blob." |
| + " Input values are also serialized sketches.") |
| public class UnionSketchUDAF extends AbstractGenericUDAFResolver { |
| |
| @Override |
| public GenericUDAFEvaluator getEvaluator(final GenericUDAFParameterInfo info) throws SemanticException { |
| final ObjectInspector[] inspectors = info.getParameterObjectInspectors(); |
| if (inspectors.length != 1 && inspectors.length != 2) { |
| throw new UDFArgumentException("One or two arguments expected"); |
| } |
| ObjectInspectorValidator.validateGivenPrimitiveCategory(inspectors[0], 0, PrimitiveCategory.BINARY); |
| if (inspectors.length == 2) { |
| ObjectInspectorValidator.validateGivenPrimitiveCategory(inspectors[1], 1, PrimitiveCategory.INT); |
| } |
| return new UnionEvaluator(); |
| } |
| |
| static class UnionEvaluator extends SketchEvaluator { |
| |
| @SuppressWarnings("deprecation") |
| @Override |
| public void iterate(final AggregationBuffer buf, final Object[] data) throws HiveException { |
| if (data[0] == null) { return; } |
| final SketchState state = (SketchState) buf; |
| if (!state.isInitialized()) { |
| if (kInspector_ != null) { |
| state.init(PrimitiveObjectInspectorUtils.getInt(data[1], kInspector_)); |
| } else { |
| state.init(); |
| } |
| } |
| merge(buf, data[0]); |
| } |
| |
| } |
| |
| } |