org.apache.hadoop.hive.ql.plan.AggregationDesc Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.hadoop.hive.ql.plan;
import java.io.Serializable;
import java.util.List;
import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator;
import org.apache.hadoop.util.ReflectionUtils;
/**
* AggregationDesc.
*
*/
public class AggregationDesc implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String genericUDAFName;
private List parameters;
private boolean distinct;
private GenericUDAFEvaluator.Mode mode;
// used for GenericUDAFEvaluator
private String genericUDAFEvaluatorClassName;
// used for GenericUDAFBridgeEvaluator
private GenericUDAFEvaluator genericUDAFWritableEvaluator;
private transient GenericUDAFEvaluator genericUDAFEvaluator;
public AggregationDesc() {
}
public AggregationDesc(final String genericUDAFName,
final GenericUDAFEvaluator genericUDAFEvaluator,
final List parameters,
final boolean distinct, final GenericUDAFEvaluator.Mode mode) {
this.genericUDAFName = genericUDAFName;
this.parameters = parameters;
this.distinct = distinct;
this.mode = mode;
setGenericUDAFEvaluator(genericUDAFEvaluator);
}
public void setGenericUDAFName(final String genericUDAFName) {
this.genericUDAFName = genericUDAFName;
}
public String getGenericUDAFName() {
return genericUDAFName;
}
public void setGenericUDAFEvaluator(
final GenericUDAFEvaluator genericUDAFEvaluator) {
this.genericUDAFEvaluator = genericUDAFEvaluator;
if (genericUDAFEvaluator instanceof Serializable) {
this.genericUDAFWritableEvaluator = genericUDAFEvaluator;
} else {
this.genericUDAFEvaluatorClassName = genericUDAFEvaluator.getClass().getName();
}
}
public GenericUDAFEvaluator getGenericUDAFEvaluator() {
if (genericUDAFEvaluator != null) {
return genericUDAFEvaluator;
}
if (genericUDAFWritableEvaluator != null) {
return genericUDAFEvaluator = genericUDAFWritableEvaluator;
}
try {
return genericUDAFEvaluator =
ReflectionUtils.newInstance(Class.forName(genericUDAFEvaluatorClassName, true,
Utilities.getSessionSpecifiedClassLoader()).asSubclass(GenericUDAFEvaluator.class), null);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public String getGenericUDAFEvaluatorClassName() {
return genericUDAFEvaluatorClassName;
}
public void setGenericUDAFEvaluatorClassName(String genericUDAFEvaluatorClassName) {
this.genericUDAFEvaluatorClassName = genericUDAFEvaluatorClassName;
}
public GenericUDAFEvaluator getGenericUDAFWritableEvaluator() {
return genericUDAFWritableEvaluator;
}
public void setGenericUDAFWritableEvaluator(GenericUDAFEvaluator genericUDAFWritableEvaluator) {
this.genericUDAFWritableEvaluator = genericUDAFWritableEvaluator;
}
public List getParameters() {
return parameters;
}
public void setParameters(List parameters) {
this.parameters = parameters;
}
public boolean getDistinct() {
return distinct;
}
public void setDistinct(final boolean distinct) {
this.distinct = distinct;
}
public void setMode(final GenericUDAFEvaluator.Mode mode) {
this.mode = mode;
}
public GenericUDAFEvaluator.Mode getMode() {
return mode;
}
public String getExprString() {
StringBuilder sb = new StringBuilder();
sb.append(genericUDAFName);
sb.append("(");
if (distinct) {
sb.append("DISTINCT ");
}
boolean first = true;
for (ExprNodeDesc exp : parameters) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(exp.getExprString());
}
String evaluatorExpr = getGenericUDAFEvaluator().getExprString();
if (evaluatorExpr != null && !evaluatorExpr.isEmpty()) {
sb.append(", ");
sb.append(evaluatorExpr);
}
sb.append(")");
return sb.toString();
}
}