티스토리 뷰

반응형

hive 에서는 기본적으로 제공되는 함수들이 많이 존재한다. 이것보다 더 다양한 기능을 만들고 싶다면 관련된 추상클래스를 확장해서 개발하고 빌드해서 add jar 를 해서 함수를 써야하는 번거로움이 존재한다. 

 

근데, 단순히 기본으로 제공하는 함수의 조합을 함수와 유사하게 사용하는 방법이 존재한다. 그게 바로 macro 이다.

 

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

 

LanguageManual UDF - Apache Hive - Apache Software Foundation

Hive Operators and User-Defined Functions (UDFs) Case-insensitive All Hive keywords are case-insensitive, including the names of Hive operators and functions. In Beeline or the CLI, use the commands below to show the latest documentation: SHOW FUNCTIONS; D

cwiki.apache.org

 

사용방법

영구적으로 등록하지 못하고, 해당 세션에만 유지가능한게 단점인데, beeline 에서 -i 옵션으로 미리 쿼리를 돌릴 대상으로 관리해서 쓰면 약간의 번거로움은 그래도 해결이 되고, 빌드없이 비즈니스 로직을 UDF 랑 유사하게 관리할 수 있다는것이 가장 큰 장점이 아닌가 싶다.

 

기본적인 표현방법은 아래와 같다.

CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;

 

미리 macro 를 별도의 hql 파일로 저장하고, beeline 실행할때 -i 옵션으로 기동시 먼저 로딩하게 하면 유용할것이다.

 

사용예시

code 값을 한글이름으로 변환하는 로직이 있다면, MACRO 로 만들어서 활용하는것이 가능하다.

좀더 유용하게 쓰이는건 json 이나 struct 값에서 일부 값을 추출해서 사용하는 반복적인 경우가 많은데 이때 사용하면 유용하다.

특히, 쿼리를 관리하는 입장에서도 유리한게 비즈니스적인 요소는 변경이 될 수 있는데, 이게 파편화 되면 관리가 어려운 문제가 있는데 이것이 상대적으로 편해진다.

 

예를 들어, code 를 이름으로 변경하는 쿼리를 모든 쿼리에 case when 으로 추가했으면, 코드하나 더 추가하려면 모든 쿼리를 뒤져서 수정해야하는데, 매크로로 분리해서 관리하면 매크로 파일만 수정하면 되기 때문에 유지보수할때 매우 유용하다.

 

beeline> CREATE TEMPORARY MACRO category_code_to_name(code STRING)
CASE 
   WHEN code = 'ADDRESS' THEN '주소'
   WHEN code = 'TEL'     THEN '전화번호'
   ELSE '분류없음'  END;


beeline> SELECT t.* , category_code_to_name(code) as name FROM (
  SELECT 'ADDRESS' as code, 1 as seq
  UNION ALL
  SELECT 'IMAGE' as code, 2 as seq
  UNION ALL
  SELECT 'TEL' as code, 3 as seq
) t;

-- 결과
+----------+--------+-------+
|  t.code  | t.seq  | name  |
+----------+--------+-------+
| ADDRESS  | 1      | 주소    |
| IMAGE    | 2      | 분류없음  |
| TEL      | 3      | 전화번호  |
+----------+--------+-------+
3 rows selected (0.15 seconds)

 

실제로 조건에 따른 메트릭값이 유도되는 복잡한 로직이 있었고, N개의 차원으로 집계를 해야했는데 스펙이 변경되서 고칠때 관련된 로직만 매크로로 분리해서 재활용해서 수정하기위한 작업이 훨~~씬 간결해진 경험이 존재한다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함