Hive详解(04) - hive函数的使用
Hive详解(04) - hive函数的使用
系统内置函数
查看系统自带的函数
hive> show functions;
显示自带的函数的用法
hive> desc function upper;
详细显示自带的函数的用法
hive> desc function extended upper;
常用内置函数
空字段赋值
hive (default)> select comm,nvl(comm, -1) from emp;
hive (default)> select comm, nvl(comm,mgr) from emp;
CASE WHEN THEN ELSE END
name |
dept_id |
sex |
悟空 |
A |
男 |
大海 |
A |
男 |
宋宋 |
B |
男 |
凤姐 |
A |
女 |
婷姐 |
B |
女 |
婷婷 |
B |
女 |
[hadoop@hadoop102 datas]$ vi emp_sex.txt
row format delimited fields terminated by "\t";
load data local inpath '/opt/module/hive/datas/emp_sex.txt' into table emp_sex;
sum(case sex when '男' then 1 else 0 end) male_count,
sum(case sex when '女' then 1 else 0 end) female_count
行转列
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
注意: CONCAT_WS must be "string or array<string>
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
[hadoop@hadoop102 datas]$ vim person_info.txt
row format delimited fields terminated by "\t";
load data local inpath "/opt/module/hive/datas/person_info.txt" into table person_info;
SELECT t1.c_b , CONCAT_WS("|",collect_set(t1.name))
SELECT NAME ,CONCAT_WS(',',constellation,blood_type) c_b
列转行
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW:LATERAL VIEW udtf(expression) tableAlias AS columnAlias,用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
[hadoop@hadoop102 datas]$ vi movie_info.txt
row format delimited fields terminated by "\t";
load data local inpath "/opt/module/hive/datas/movie_info.txt" into table movie_info;
explode(split(category,",")) movie_info_tmp AS category_name ;
窗口函数(开窗函数)
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的改变而变化。
LAG(col,n,default_val):往前第n行数据
LEAD(col,n, default_val):往后第n行数据
NTILE(n):把有序窗口的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。
[hadoop@hadoop102 datas]$ vi business.txt
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
load data local inpath "/opt/module/hive/datas/business.txt" into table business;
select name,count(*) over () from business where substring(orderdate,1,7) = '2017-04' group by name;
select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) from business;
sum(cost) over() as sample1,--所有行相加
sum(cost) over(partition by name) as sample2,--按name分组,组内数据相加
sum(cost) over(partition by name order by orderdate) as sample3,--按name分组,组内数据累加
rows必须跟在Order by 子句之后,对排序的结果进行限制,使用固定的行数来限制分区中的数据行数量
select name,orderdate,cost, ntile(5) over(order by orderdate) sorted
Rank
[hadoop@hadoop102 datas]$ vi score.txt
row format delimited fields terminated by "\t";
load data local inpath '/opt/module/hive/datas/score.txt' into table score;
rank() over(partition by subject order by score desc) rp,
dense_rank() over(partition by subject order by score desc) drp,
row_number() over(partition by subject order by score desc) rmp
其他常用函数
常用日期函数
select unix_timestamp("2020-10-28",'yyyy-MM-dd');
select from_unixtime(1603843200);
select to_date('2020-10-28 12:12:12');
select year('2020-10-28 12:12:12');
select month('2020-10-28 12:12:12');
select day('2020-10-28 12:12:12');
select hour('2020-10-28 12:13:14');
select minute('2020-10-28 12:13:14');
select second('2020-10-28 12:13:14');
select weekofyear('2020-10-28 12:12:12');
select dayofmonth('2020-10-28 12:12:12');
select months_between('2020-04-01','2020-10-28');
select add_months('2020-10-28',-3);
select datediff('2020-11-04','2020-10-28');
select date_add('2020-10-28',4);
select date_sub('2020-10-28',-4);
select last_day('2020-02-30');
select date_format('2020-10-28 12:12:12','yyyy/MM/dd HH:mm:ss');
常用取整函数
常用字符串操作函数
regexp_replace:使用正则表达式匹配目标字符串,匹配成功后替换!
SELECT regexp_replace('2020/10/25', '/', '-');
集合操作
select size(friends) from test3;
select map_keys(children) from test3;
select map_values(children) from test3;
array_contains: 判断array中是否包含某个元素
select array_contains(friends,'bingbing') from test3;
select sort_array(friends) from test3;
多维分析
自定义函数
自定义函数简介
Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
(2)UDAF(User-Defined Aggregation Function)
(3)UDTF(User-Defined Table-Generating Functions)
https://cwiki.apache.org/confluence/display/Hive/HivePlugins
org.apache.hadoop.hive.ql.udf.generic.GenericUDF
org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
create [temporary] function [dbname.]function_name AS class_name;
drop [temporary] function [if exists] [dbname.]function_name;
自定义UDF函数
hive(default)> select my_len("abcd");
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
public
class MyStringLength extends GenericUDF {
* @param arguments 输入参数类型的鉴别器对象
* @throws UDFArgumentException
public ObjectInspector initialize(ObjectInspector[] arguments)
throws UDFArgumentException {
throw
new UDFArgumentLengthException("Input Args Length Error!!!");
if(!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)){
throw
new UDFArgumentTypeException(0,"Input Args Type Error!!!");
return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
public Object evaluate(DeferredObject[] arguments)
throws HiveException {
if(arguments[0].get()
==
null){
return arguments[0].get().toString().length();
public String getDisplayString(String[] children)
{
4)打成jar包上传到服务器/opt/module/hive/datas/myudf.jar
hive (default)> add jar /opt/module/hive/myudf.jar;
hive (default)> create temporary function my_len as "com.zhangjk.hive.MyStringLength";
hive (default)> select my_len("hello");
自定义UDTF函数
自定义一个UDTF实现将一个任意分割符的字符串切割成独立的单词,例如:
hive(default)> select myudtf("hello,world,hadoop,hive", ",");
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;
public
class MyUDTF extends GenericUDTF {
private ArrayList<String> outList =
new ArrayList<>();
public StructObjectInspector initialize(StructObjectInspector argOIs)
throws UDFArgumentException {
List<String> fieldNames =
new ArrayList<>();
List<ObjectInspector> fieldOIs =
new ArrayList<>();
fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);
public
void process(Object[] args)
throws HiveException {
String arg = args[0].toString();
String splitKey = args[1].toString();
String[] fields = arg.split(splitKey);
public
void close()
throws HiveException {
2)打成jar包上传到服务器/opt/module/hive/data/myudtf.jar
hive (default)> add jar /opt/module/hive/myudtf.jar;
hive (default)> create temporary function myudtf as "com.atguigu.hive.MyUDTF";
hive (default)> select myudtf("hello,word,hadoop,hive", ",");
Time taken: 0.173 seconds, Fetched: 4 row(s)
Hive详解(04) - hive函数的使用的更多相关文章
- Hive详解(03) - hive基础使用
Hive详解(03) - hive基础使用 Hive数据类型 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个 ...
- Hive详解(06) - Hive调优实战
Hive详解(06) - Hive调优实战 执行计划(Explain) 基本语法 EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query 案例实操 ...
- Hive详解(02) - Hive 3.1.2安装
Hive详解(02) - Hive 3.1.2安装 安装准备 Hive下载地址 Hive官网地址:http://hive.apache.org/ 官方文档查看地址:https://cwiki.apac ...
- Hive详解(01) - 概念
Hive详解(01) - 概念 hive简介 Hive:由Facebook开源用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类S ...
- Hive详解(05) - 压缩和存储
Hive详解(05) - 压缩和存储 Hadoop压缩配置 MR支持的压缩编码 压缩格式 算法 文件扩展名 是否可切分 DEFLATE DEFLATE .deflate 否 Gzip DEFLATE ...
- ggplot2作图详解:入门函数qplot
ggplot2作图详解:入门函数qplot ggplot2的功能不用我们做广告,因为它的作者Hadley Wickham就说ggplot2是一个强大的作图工具,它可以让你不受现有图形类型的限制,创 ...
- Spark详解(04) - Spark项目开发环境搭建
类别 [随笔分类]Spark Spark详解(04) - Spark项目开发环境搭建 Spark Shell仅在测试和验证程序时使用的较多,在生产环境中,通常会在IDEA中编制程序,然后打成Ja ...
- kafka详解(04) - kafka监控 可视化工具
kafka详解(04) - kafka监控 可视化工具 Kafka监控Eagle 1)修改kafka启动命令 修改kafka-server-start.sh命令中 if [ "x$KAFKA ...
- HBase详解(04) - HBase Java API使用
HBase详解(04) - HBase Java API使用 环境准备 新建Maven项目,在pom.xml中添加依赖 <dependency> <groupId>org.ap ...
随机推荐
- JVM内存结构模型
- 一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机,TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用
一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机.海尔空调等,TCL工厂可以生产TCL电视机,TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用 ...
- Audacity开源音频处理软件使用入门
操作系统 :Windows10_x64 Audacity版本:3.2.1 Audacity是一款开源.免费.跨平台的音频处理及录音软件,支持Windows.macOS及Linux操作系统. 这里记录下 ...
- XAF新手入门 - 类型子系统(Types Info Subsystem)
类型子系统概述 类型子系统是XAF的核心概念,但我们平时却很少关注它,它集中存储了模块中的类型,它是生成应用程序模型(Application Model)的基础,它与XAF中其它的概念都有所关联,了解 ...
- JAVA的File对象
文件 1.File对象 java封装的一个操作文件及文件夹(目录)的对象.可以操作磁盘上的任何一个文件和文件夹. 2.创建文件 方式一:根据路径构建一个File对象new File(path) // ...
- 网络协议之:redis protocol 详解
目录 简介 redis的高级用法 Redis中的pipline Redis中的Pub/Sub RESP protocol Simple Strings Bulk Strings RESP Intege ...
- c语言内存四区、数据存储范围和内存存储方向
(1)代码区通常是共享只读(代码无法修改)的,即可以被其他的程序调用,例如运行两个qq,除了数据不一样,代码都是一样的, 每次运行qq,都会将代码和数据加载到内存中,除了数据,每次加载的代码都是一样的 ...
- 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?
本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...
- UWSGI 安装出现 ModuleNotFoundError: No module named '_ctypes'
原因:Python3中有个内置模块叫ctypes,它是Python3的外部函数库模块,它提供兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用C ...
- 远程桌面报错credssp
远程桌面连接的时候有时出现"出现身份验证错误.要求的函数不受支持:这可能是由于CredSSP 加密 Oracle 修正"的提示, 针对这种情况有以下两种版本的操作系统解决方案: w ...