본문 바로가기
빅데이터/hive

[hive] 하이브의 UDF, UDAF, UDTF

by hs_seo 2017. 3. 22.

하이브의 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에 구현된 하이브 소스코드를 보면더 도움이 된다. 



반응형