Hive学习笔记02
分类:
IT文章
•
2024-09-15 12:31:25
1. Hive基本操作
a. DML操作
- load:加载时只是把数据文件移动到hive表对应的位置。
- loacl如果指定了就在本地的文件系统,local会将本地文件系统的文件复制到目标文件系统中。
- overwrite:如果使用了overwrite目标表或者分区中的内容就会被覆盖。
load data local inpath 'path' into table tb_load1;
View Code
insert overwrite table stu_buck
select * from student cluster by(Sno);
View Code
- select
- order by:全局排序
- sort by:局部排序,在数据进reduce之前进行排序。如果reducetask任务数大于1不保证全局有序。
- distribute by(字段):根据指定字段数据分发到不同的reduce,分发算法是hash散列。
- Cluster by(字段):除了具有Distribute by的功能外,还会进行排序。如果distribute by 和order by 是一个字段等同于Cluster by(字段)
2. Hive Join
不支持等值连接,因为等值连接很难转换为mapreduce任务。
https://www.cnblogs.com/yiwanfan/p/9628235.html
3. Hive函数入门
a. 普通函数
https://www.cnblogs.com/kimbo/p/6288516.html
b. 用户自定义函数
当内置函数无法满足业务需求时,此时就可以考虑使用用户自定义函数。
自定义函数分为三种:
- UDF:普通函数(一进一出)
- UDAF:聚合函数(多进一出)
- UDTF:表生成函数(一进多出)
UDF开发实例:
新建Java项目:添加依赖 hive-exec-1.2.1.jar 和 hadoop-common-2.7.4.jar 依赖
新建类继承UDF,并重载evaluate,在里面实现业务逻辑
打成jar包
添加jar包到hive的classpath:hive>add jar /home/hadoop/udf.jar;
创建临时函数与开发好的java 类关联:create temporary function tolowercase as 'cn.itcast.bigdata.udf.ToProvince';
在sql中就可以使用该函数了:Select tolowercase(name),age from t_test;
4. Hive函数高阶特性
a. UDTF函数-expode函数
explode函数是hive内置的UDTF函数,可以将一个map或者array类型的字段展开。array类型转换后是每个元素生成一行,map类型是每一对元素作为一行,key作为一列,value作为一列。
--数据
001,allen,usa|china|japan,1|3|7
002,kobe,usa|england|japan,2|3|5
--创建表
create table test_message(id int,name string,location array<string>,city array<int>) row format delimited fields terminated by ","
collection items terminated by '|';
--加载数据
load data local inpath "/root/hivedata/test_message.txt" into table test_message;
--explode
select explode(location) from test_message;
select name,explode(location) from test_message; --报错
当使用UDTF函数的时候,hive只允许对拆分字段进行访问的。
View Code