TRANSFORM() 명령은 하이브에 입력되는 원천로그를 변형해야 할 때 사용하면 된다.
만약 입력되는 로그가 아래와 같은 형식으로 입력된다고 한다면 일반적인 MR로는 처리가 블가능하다.
이때 TRANSFORM() 을 이용하여 출력형식을 아래와 같이 변경하는 것이 가능하다.
<입력>
DATA1
Column1-1
Column1-2
DATA2
Column2-1
Column2-2
<출력>
DATA1 Column1-1 Column1-2
DATA2 Column2-1 Column2-2
<custom_mapreduce.py>
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re, json, sys, time
def readFile():
with sys.stdin as lines:
#with open("./TEST_DATA.txt") as lines: # 로컬 테스트
#print lines.read()
#print "-" * 100
str_list = []
for line in lines:
if line.startswith("DATA") and len(str_list) != 0:
print "\t".join(str_list)
del str_list[:]
str_list.append(line.strip())
else:
str_list.append(line.strip())
print "\t".join(str_list)
if __name__ == "__main__":
readFile()
위의 파일을 이용하여 아래와 같이 테이블을 생성하고,
쿼리를 날리면 아래와 같이 결과를 확인할 수 있다.
CREATE EXTERNAL TABLE sample_temp
(
rawLine STRING
)
LOCATION "/user/shs/data/txt/";
SELECT TRANSFORM(rawLine) USING "hdfs://127.0.0.1:8020/user/shs/custom_mapred.py" AS (type, dt1, dt2)
FROM sample_temp;
Total MapReduce CPU Time Spent: 1 seconds 710 msec
OK
DATA1 Column1-1 Column1-2
DATA2 Column2-1 Column2-2
이상과 같이 TRANSFORM() 명령을 이용하여 데이터를 변형하는 것이 가능하다.
https://acadgild.com/blog/hive-udf-in-python/
하이브 TRANSFORM - https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform
'빅데이터 > hive' 카테고리의 다른 글
[hive] 다이나믹 파티션의 __HIVE_DEFAULT_PARTITION__ (0) | 2017.02.02 |
---|---|
[Hive] transform 으로 파이썬을 이용할 때 exception 출력하기 (0) | 2017.01.23 |
[hive] desc 명령을 이용하여 하이브 테이블, 파티션의 로케이션 확인하기 (0) | 2017.01.19 |
[hive][tez][mr] 하이브 처리중 매퍼의 개수 설정하는 벙법 (0) | 2017.01.17 |
[hive] java.net.URISyntaxException: Relative path in absolute URI: file:./tmp/yarn 오류 처리 (0) | 2017.01.17 |