하이브의 UDF는 UDF, UDAF, UDTF 로 구분된다.
- UDF: 한개의 행에서 동작한다. 입력과 출력은 하나이다.
- ex) TRIM()
- UDAF: 집계 함수이다. 여러 행의 데이터를 집계하여 하나의 결과를 출력합니다.
- ex) COUNT(), SUM()
- UDTF: 하나의 행을 입력으로 받아서 여러행의 데이터를 반환한다.
- ex) EXPLODE()
하이브에서 제공하는 기본 UDF를 이용할 수 있고,
사용자가 UDF 를 만들어서 적용할 수 도 있다.
사용자가 UDF를 만들어서 적용하는 방법은 다음과 같다.
package sdk.hadoop.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Sample extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
-- JAR 추가
ADD JAR hdfs://localhost:8020/user/hadoop/sample.jar;
-- 함수 생성
CREATE TEMPORARY FUNCTION sampleFunc AS 'sdk.hadoop.hive.Sample';
-- 생성한 함수 사용
select sampleFunc('abcd');
위와 같이 만들어서 사용할 수 있다.
UDF, UDAF, UDTF의 자세한 구현 사항은 git에 구현된 하이브 소스코드를 보면더 도움이 된다.
hive 빌트인 UDF - https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-HiveOperatorsandUser-DefinedFunctions(UDFs)
UDF 생성 방법 - https://cwiki.apache.org/confluence/display/Hive/HivePlugins
Hive의 UDF 구현체 - https://github.com/apache/hive/tree/master/ql/src/java/org/apache/hadoop/hive/ql/udf
반응형
'빅데이터 > hive' 카테고리의 다른 글
[hive] UDAF 구현 예제 (0) | 2017.03.27 |
---|---|
[hive] UDF 구현 예제 (0) | 2017.03.23 |
[hive] 하이브의 CSV 서데 사용 방법 (0) | 2017.03.08 |
[hive] 하이브 테이블에 데이터 입력 방법 (0) | 2017.02.21 |
[hive] 하이브 테이블 생성하기 (0) | 2017.02.21 |