摄影展示网站源码,大连网红打卡地,百度关键词价格排行榜,学校网站模板 html1.hive函数各种命令
查看系统自带的函数
hive show functions;
-- 显示自带的函数的用法
hive desc function upper;
-- 详细显示自带的函数的用法
hive desc function extended upper;
-- 添加jar包到hive中
add jar /data/xx.jar;
-- 创建自定义函数
create fu…1.hive函数各种命令
查看系统自带的函数
hive show functions;
-- 显示自带的函数的用法
hive desc function upper;
-- 详细显示自带的函数的用法
hive desc function extended upper;
-- 添加jar包到hive中
add jar /data/xx.jar;
-- 创建自定义函数
create function 函数名 as 函数类名;
-- 一次性直接添加自定义函数
create function 函数名 as 函数类名 using jar hdfs://mycluster/xxx.jar;
-- 删除函数Drop function 函数名;
-- 列出jar包详情
list jars;
-- 删除jar包
delete jars /data/xxx.jar;2.自定义函数
1Hive 自带了一些函数比如max/min等但是数量有限自己可以通过自定义UDF来方便的扩展。 2当Hive提供的内置函数无法满足你的业务处理需要时此时就可以考虑使用用户自定义函数UDFuser-defined function。 3根据用户自定义函数类别分为以下三种 1UDFUser-Defined-Function 一进一出 2UDAFUser-Defined Aggregation Function 聚集函数多进一出 类似于count/max/min 3UDTFUser-Defined Table-Generating Functions 一进多出 如lateral view explore() 4官方文档地址 https://cwiki.apache.org/confluence/display/Hive/HivePlugins 5编程步骤 1继承org.apache.hadoop.hive.ql.UDF 2需要实现evaluate函数evaluate函数支持重载 3在hive的命令行窗口创建函数 a添加jar add jar linux_jar_path b创建function create [temporary] function [dbname.]function_name AS class_name; 4在hive的命令行窗口删除函数 Drop [temporary] function [if exists] [dbname.]function_name; 6注意事项 1UDF必须要有返回类型可以返回null但是返回类型不能为void
2.1 自定义UDF函数
1创建一个Maven工程Hive 2导入依赖
dependencies!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --dependencygroupIdorg.apache.hive/groupIdartifactIdhive-exec/artifactIdversion1.2.1/version/dependency
/dependencies3创建一个类
package com.atguigu.hive;
import org.apache.hadoop.hive.ql.exec.UDF;public class Lower extends UDF {public String evaluate (String s) {if (s null) {return null;}return s.toLowerCase();}
}4打成jar包上传到服务器/opt/module/datas/udf.jar 5将jar包添加到hive的classpath
hive (default) add jar /opt/module/datas/udf.jar;6创建临时函数与开发好的java class关联
hive (default) create temporary function mylower as com.ceshi.hive.Lower;7即可在hql中使用自定义的函数
hive (default) select ename, mylower(ename) lowername from emp;7.2.2 自定义UDTF函数 1需求说明 自定义一个UDTF实现将一个任意分割符的字符串切割成独立的单词例如
Line:hello,world,hadoop,hiveMyudtf(line, ,)hello
world
hadoop
hive2代码实现
package com.atguigu.udtf;import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;import java.util.ArrayList;
import java.util.List;public class MyUDTF extends GenericUDTF {private ArrayListString outList new ArrayList();Overridepublic StructObjectInspector initialize(StructObjectInspector argOIs) throws UDFArgumentException {//1.定义输出数据的列名和类型ListString fieldNames new ArrayList();ListObjectInspector fieldOIs new ArrayList();//2.添加输出数据的列名和类型fieldNames.add(lineToWord);fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);}Overridepublic void process(Object[] args) throws HiveException {//1.获取原始数据String arg args[0].toString();//2.获取数据传入的第二个参数此处为分隔符String splitKey args[1].toString();//3.将原始数据按照传入的分隔符进行切分String[] fields arg.split(splitKey);//4.遍历切分后的结果并写出for (String field : fields) {//集合为复用的首先清空集合outList.clear();//将每一个单词添加至集合outList.add(field);//将集合内容写出forward(outList);}}Overridepublic void close() throws HiveException {}
}3打成jar包上传到服务器/opt/module/data/udtf.jar 4将jar包添加到hive的classpath下
hive (default) add jar /opt/module/data/udtf.jar;5创建临时函数与开发好的java class关联
hive (default) create temporary function myudtf as com.atguigu.hive.MyUDTF;6即可在hql中使用自定义的函数
hive (default) select myudtf(line, ,) word from words;