hive当中的三种参数设置
第一种 hive-site.xml 对所有的hive的客户端都有效
第二种参数设置:命令行的参数 bin/hive -hiveconf 参数名=参数值 对我们进入的这次会话有效
第三种参数设置 :参数声明 对当前的sql语句生效 set 参数名=参数值
hive自定义函数
hive的自定义函数:
第一种:UDF 一行数据进去,一行数据出来
第二种:UDAF 多行进,一行出
第三种:UDTF 一行进 多行出
hive自定义函数步骤
第一步:常见工程,导入jar包
第二步:写一个java类,继承UDF
第三步:定义一个方法 方法名 evaluate 必须有返回值,而且还有一个参数,表示接收我们输入的数据
第四步:定义我们的udf的逻辑
第五步:打成jar包放到hive的lib目录下
第六步:hive的客户端 add jar 添加我们的jar包
第七步:设置临时函数与我们自定义的udf进行关联
第八步:使用udf
案例-大小写转换
package cn.itcast.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class ItcastUDF extends UDF {
/**
*定义一个方法,方法名定死了就叫做个evaluate
* 将小写字母转大写字母
*
*/
public Text evaluate(Text inputData){
if(null != inputData && !inputData.toString().equals("")){
String s = inputData.toString().toUpperCase();
return new Text(s);
}else{
return new Text("");
}
}
案例,自定义udf函数
json格式的数据如下
{“movie”:“1193”,“rate”:“5”,“timeStamp”:“978300760”,“uid”:“1”}
{“movie”:“661”,“rate”:“3”,“timeStamp”:“978302109”,“uid”:“1”}
{“movie”:“914”,“rate”:“3”,“timeStamp”:“978301968”,“uid”:“1”}
{“movie”:“3408”,“rate”:“4”,“timeStamp”:“978300275”,“uid”:“1”}
{“movie”:“2355”,“rate”:“5”,“timeStamp”:“978824291”,“uid”:“1”}
{“movie”:“1197”,“rate”:“3”,“timeStamp”:“978302268”,“uid”:“1”}
{“movie”:“1287”,“rate”:“5”,“timeStamp”:“978302039”,“uid”:“1”}
通过自定义udf函数,将我们的数据解析出来,变成四个字段
movie rate timeStamp uid
第一步:定义一个表jsonOrigin,表里面就一个字段 jsonStr
load data local inpath
第二步:定义一个udf函数 接收json的数据,解析成一行数据 Text 1193 \t 5 \t 978300760 \t 1
select parseJson(jsonStr) from jsonOrigin
输出成1193 \t 5 \t 978300760 \t 1 将数据保存到本地
第三步:建立一个表 里面四个字段,用\t 分割,加载本地数据即可
我告诉你怎么做,你用代码来实现