transform
Hive 的 TRANSFORM 关键字提供了在 SQL 中调用自写脚本的功能。适合实现 Hive 中没有的 功能又不想写 UDF 的情况,脚本一般都是python写的。
二、案例操作
1.数据文件内容
vi transform.txt
steven:100;steven:90;steven:99^567^22
ray:90;ray:98^456^30
Tom:81^222^33
2.清洗后到数据库的数据格式如下:
steven 100 567 22
steven 90 567 22
steven 99 567 22
ray 90 456 30
ray 98 456 30
Tom 81 222 33
3.创建表存储原始数据
create table u_data(
col1 string,
code int,
age int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '^'
STORED AS TEXTFILE;
4.加载数据
load data local inpath '/home/hadoop/data/transform.txt' overwrite into table u_data;
3.编写transform脚本
vi u.py
#!/usr/bin/python
import sys
for line in sys.stdin:
values = line.split()
tmp = values[0]
key_values = tmp.split(";")
for kv in key_values:
k = kv.split(":")[0]
v = kv.split(":")[1]
print '\t'.join([k,v,values[1],values[2]])
4.脚本部署位置 :
/home/hadoop/data/u.py
添加执行路径
add file /home/datechange.py;
5.测试
select transform(u.col1, u.code, u.age) using 'python u.py' as (col1, col2, col3, col4) from (select * from u_data) as u;