-
Hive GenericUDTF 사용프로그래밍/hive 2016. 5. 13. 15:14728x90
Hive에서 일반적인 UDF는 사용하기 쉽다.
Hive UDF는
[INPUT] : ONE ROW -> [OUTPUT] ONE ROW 이런 결과 값이 나온다.
하지만 필요에 의해
[INPUT] : ONE ROW -> [OUTPUT] MULTI ROW 값이 필요하게 되었다.
찾아보니 GenericUDTF를 사용 하면 된다.
<Example Java Source>
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
public class RealSPDGenericUDTF extends GenericUDTF {
public StructObjectInspector initialize(StructObjectInspector args) throws UDFArgumentException {
// output
List<String> fieldNames = new ArrayList<String>(5);
List<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(5);
fieldNames.add("key");
fieldNames.add("idx");
fieldNames.add("spd");
fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);
}
@Override
public void process(Object[] record) throws HiveException {
//Object => String
final String name = record[0].toString();
//소스코드 입력
//initialize에서 설정된 field 수와 개수를 맞춤
Object[] m_Obj = new Object[3];
m_Obj[0] = arrValue[0]; //direction Key
m_Obj[1] = arrValue[2]; //IDX
m_Obj[2] = arrValue[3]; //SPD
/*
* forward 함수를 사용 할 때 마다 결과 값이 출력된다.
* 결과 값은 함수
*/
forward(m_Obj);
}
@Override
public void close() throws HiveException {
// do nothing
}
}
<사용>
select genericUDF(object) from table;
<결과>
key idx spd
12 1 2
1 2 2
이런 식으로 나온다!
덕분에 긴 쿼리를 줄일 수 있었다.
728x90'프로그래밍 > hive' 카테고리의 다른 글
Hive MIN/MAX STRUCT 쿼리 사용 (0) 2017.12.25 Hive CLI 기본 셋팅 (0) 2017.12.25 Hive 성능 향상 방안 (0) 2016.08.18 Hive Command Line CLI History 보기 (0) 2016.06.07 HDP Hiveserver2 JAVA heap Error (0) 2016.03.30