用例
Hive0.8.1没有rank 功能,但业务需要实现分组组内topK SQL语句。应此可以使用UDF来实现。
设计
使用JAVA Agent来解决函数实现类加载问题;
UDF如下:
@Description(name = "row_number", value = "_FUNC_ a - Returns Top N after group.")
public class RowNumber extends UDF {
private static int MAX_VALUE = 50;
private static String comparedColumn[] = new String[MAX_VALUE];
private static int rowNum = 1;
public int evaluate(Object... args) {
String columnValue[] = new String[args.length];
for (int i = 0; i < args.length; i++) {
columnValue[i] = args[i].toString();
}
if (rowNum == 1) {
comparedColumn = columnValue;
} else {
for (int i = 0; i < columnValue.length; i++) {
if (!comparedColumn[i].equals(columnValue[i])) {