官网 https://cwiki.apache.org/confluence/display/Hive/Home DML/Operators and UDFs
-
一些常用内置UDF、UDAF函数
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF -
UDTF函数,行列转换
collect_list:配合group by 将多行数据收集为一个数组
concat_ws 将多个拼接为一个
split 将一个拆分成多个
explode 栅列 函数# name # course PK MapReduce,Hive,Spark,Flink J Hadoop,Hbase,Kafka // 将以上数据,处理为: PK MapReduce PK Hive PK Spark PK Flink J Hadoop J Hbase J Kafka
使用 explode + split,将course列拆分后转成多行
select name, c from teacher_course lateral view explode(split(course,',')) tmp as c;自定义函数
- UDF 一进一出。 如:upper lower substr
- UDAF 多进一出 。 如:sum …
- UDTF 一进多出。 如:explode
- 创建maven工程导入依赖:
org.apache.hive hive-exec3.1.2
- 创建 自定义UDF类继承自 UDF
// 自定义一个 add_random()函数,在传入的参数后增加一个随机整数 public class AddRandomUDF extends org.apache.hadoop.hive.ql.exec.UDF { static Random random = new Random(); // 方法名必须是evaluate,打包后hive会设别和执行 public String evaluate(String str){ if (str == null){ return null; } str += random.nextInt(10); return str; } }
-
maven package 打jar包到当前工程target下,上传此jar包至linux
~/lib/hive_demo-1.0-SNAPSHOT.jar
启动hive,并add jar
[liqiang@Gargantua bin]$ hive hive > add jar /home/liqiang/lib/hive_demo-1.0-SNAPSHOT.jar;
创建临时函数:【作用当前会话】
hive > CREATE TEMPORARY FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF";
现在可以在当前会话中同使用内置函数一样使用 add_random()
hive > select add_random('123') from my_table;
此方式需要在使用前 add jar 并 CREATE FUNCTION。可以将这两步命令写在文件中,启动hive同时指定初始化这个文件
[liqiang@Gargantua bin]$ hive -i [这个文件]方式二:临时函数 auxlib/xxx.jar
-
${HIVE_HOME}/auxlib目录下的jar会自动被hive关联,于是可以省掉 add jar这一步。
创建 auxlib 目录,并复制一份jar到 auxlib/ -
启动hive,并创建函数 【作用当前会话】
hive > CREATE TEMPORARY FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF";
参考: CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
-
jar 包不能存在本地了。需要上传hdfs。
[liqiang@Gargantua data]$ hdfs dfs -put ~/lib/hive_demo-1.0-SNAPSHOT.jar /lib/
-
创建持久函数。 【作用所有会话】
hive > CREATE FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF" > USING JAR "hdfs://gargantua:9000/lib/hive_demo-1.0-SNAPSHOT.jar";
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)