首页 > 其他分享 >数据仓库建模工具之一——Hive学习第七天

数据仓库建模工具之一——Hive学习第七天

时间:2024-07-26 23:28:21浏览次数:9  
标签:set string -- 数据仓库 Hive explode collect select 第七天

5、Hive内置函数(分区和排序后面学习hive中的函数)

UDF:一对一

UDTF:一对多

UDAF:多对一

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
-- 1.查看系统自带函数
show functions;
-- 2.显示自带的函数的用法
desc function xxxx;
-- 3.详细显示自带的函数的用法
desc function extended upper;

5.1 内置函数分类

关系操作符:包括 = 、 <> 、 <= 、>=等

算数操作符:包括 + 、 - 、 *、/等

逻辑操作符:包括AND 、 && 、 OR 、 || 等

复杂类型构造函数:包括map、struct、create_union等

复杂类型操作符:包括A[n]、Map[key]、S.x

数学操作符:包括ln(double a)、sqrt(double a)等

集合操作符:包括size(Array)、sort_array(Array)等

类型转换函数: binary(string|binary)、cast(expr as )

日期函数:包括from_unixtime(bigint unixtime[, string format])、unix_timestamp()等

条件函数:包括if(boolean testCondition, T valueTrue, T valueFalseOrNull)等

字符串函数:包括acat(string|binary A, string|binary B…)等

其他:xpath、get_json_objectscii(string str)、con

5.2 UDTF hive中特殊的一个功能(进一出多)

-- UDF 进一出一


-- UDAF 进多出一
-- collect_set()和collect_list()都是对多列转成一行,区别就是list里面可重复而set里面是去重的
-- concat_ws(':',collect_set(type))   ':' 表示你合并后用什么分隔,collect_set(stage)表示要合并表中的那一列数据
select 字段名,concat_ws(':',collect_set(列名)) as 别名 from 表名 group by id;

-- UDTF 进一出多
-- explode  将hive某列一行中复杂的 array 或 map 结构拆分成多行(只能输入array或map)
-- 扁平化(炸裂函数)可以将一组数组的数据变成一列表
select  explode(split(列名,"数据的分隔符")) from 表名;
-- lateral view 表生成函数,可以将explode的数据生成一个列表
select id,name,列名 from 表1,lateral view explode(split(表1.列名,"数据的分隔符"))新列名 as 别列名;
  • 解释:Lateral View其实就是用来和像类似explode这种UDTF函数联用的lateral view会将UDTF生成的结果放到一个虚拟表中,然后这个虚拟表会和输入行进行join来达到连接UDTF外的select字段的目的。
-- 创建数据库表
create table t_movie1(
id int,
name string,
types string
)
row format delimited fields terminated by ','
lines terminated by '\n';

-- 电影数据  movie1.txt
-- 加载数据到数据库 load data inpath '/hive_test/movie1.txt' into table t_movie1;
1,这个杀手不太冷,剧情-动作-犯罪
2,七武士,动作-冒险-剧情
3,勇敢的心,动作-传记-剧情-历史-战争
4,东邪西毒,剧情-动作-爱情-武侠-古装
5,霍比特人,动作-奇幻-冒险

-- explode  可以将一组数组的数据变成一列表
select  explode(split(types,"-")) from t_movie1;

-- lateral view 表生成函数,可以将explode的数据生成一个列表
select id,name,type from t_movie1 lateral view explode(split(types,"-")) typetable as type;
-- 创建数据库表
create table t_movie2(
id int,
name string,
type string
)
row format delimited fields terminated by ','
lines terminated by '\n';

-- 电影数据 movie2.txt
-- 加载数据到数据库 load data inpath '/hive_test/movie2.txt' into table t_movie2;
1,这个杀手不太冷,剧情
1,这个杀手不太冷,动作
1,这个杀手不太冷,犯罪
2,七武士,动作
2,七武士,冒险
2,七武士,剧情
3,勇敢的心,动作
3,勇敢的心,传记
3,勇敢的心,剧情
3,勇敢的心,历史
3,勇敢的心,战争
4,东邪西毒,剧情
4,东邪西毒,动作
4,东邪西毒,爱情
4,东邪西毒,武侠
4,东邪西毒,古装
5,霍比特人,动作
5,霍比特人,奇幻
5,霍比特人,冒险

-- collect_set()和collect_list()都是对列转成行,区别就是list里面可重复而set里面是去重的
-- concat_ws(':',collect_set(type))   ':' 表示你合并后用什么分隔,collect_set(stage)表示要合并表中的那一列数据
select id,concat_ws(':',collect_set(type)) as types from t_movie2 group by id;

类似于上述的查询操作,其实hive是不经过mapreduce任务的,是因为hive对操作过程进行了优化,所以速度很快。

5.3 WordCount案例

数据准备

hello,world
hello,bigdata
like,life
bigdata,good,hello,world
bigdata,java,hadoop

建表

create table wc
(
line string
)
row format delimited fields terminated by '\n';

导入数据

load data local inpath '/usr/local/soft/data/wc1.txt' into table wc;

步骤1:先对一行数据进行切分

select split(line,',') from wc;

步骤2:将行转列

select explode(split(line,',')) from wc; 

步骤3:将相同的进行分组统计

select w.word,count(*) from (select explode(split(line,',')) as word from wc) w group by w.word;

标签:set,string,--,数据仓库,Hive,explode,collect,select,第七天
From: https://www.cnblogs.com/shmil/p/18326458

相关文章

  • hive03_高级操作
    Hive分区表https://blog.csdn.net/weixin_41122339/article/details/81584110表在存储时,可以将数据根据分区键的列值存储在表目录的子目录中。这样将数据切分到不同目录存储后,可以加快对分区键字段的查询和过滤速度,通过在查询条件中指定过滤条件,可以只对指定目录的数据进行扫......
  • hive02_SQL操作
    HiveDDL操作操作前需要保证hive成功启动:#启动HiveServer2hive--servicehiveserver2&#启动MetaStorehive--servicemetastore&#进入hive命令行界面beeline-ujdbc:hive2://node03:10000-nroot数据库操作操作类似于MySQL数据库操作。表基本操作h......
  • 基于CDH 6.3.0 搭建 Hive on Spark 及相关配置和调优
    基于CDH6.3.0搭建HiveonSpark及相关配置和调优Hive默认使用的计算框架是MapReduce,在我们使用Hive的时候通过写SQL语句,Hive会自动将SQL语句转化成MapReduce作业去执行,但是MapReduce的执行速度远差于Spark。通过搭建一个HiveOnSpark可以修改Hive底层的计算引擎,将Map......
  • 数据仓库建模工具之一——Hive学习第六天
    2、Hive分桶(接着前面hive分区开始学习)2.1 业务场景数据分桶的适用场景:分区提供了一个隔离数据和优化查询的便利方式,不过并非所有的数据都可形成合理的分区,尤其是需要确定合适大小的分区划分方式不合理的数据分区划分方式可能导致有的分区数据过多,而某些分区没有什么数据的尴......
  • Hive SQL的坑和note
    Hive的GROUPBY是不能识别别名的:把别名对应的那个表达式都扔到groupby里去非聚合列必须出现在groupby中selectcol1,col2,collect_set(col3)sum(is_drawback)asorder_cntcount(1)asxxxFROMxxx.tablegroupbycol1,col2insertinto与insertoverwrite都......
  • php使用ZipArchive解压压缩包
    //处理照片压缩包$zip=new\ZipArchive();//获取压缩包内容照片数量$path='static/oa/img/staImport/'.date('Ymd').'/'.date('His');if($zip->open($param['fileUrl'])===TRU......
  • 数据仓库中的数据治理
    一、数据治理的定义:数据治理是一套用于管理和保护数据资源的规范、流程和控制机制。在数据仓库中,数据治理涉及规划、定义、监控和维护数据的标准、策略和流程,以确保数据的质量、完整性和一致性。二、数据治理的流程:制定数据治理策略:明确数据治理的目标、范围和原则,并制定数......
  • 苦学Opencv的第七天:图像的阈值处理
    PythonOpenCV入门到精通学习日记:图像的阈值处理前言阈值是图像处理中很重要的一个概念,类似于一个标准线。所有像素值都去和这条“标准线”进行比较,会得到大于,小于,等于三种不同的结果,程序对这三种结果进行分组,然后分别对不同组的像素进行“加深”或“变淡”的操作,让整个图......
  • 计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微
    本科毕业论文论文题目:基于Hadoop的热点舆情数据分析与可视化                                                      姓名:      金泓羽       学号:   20200804050115   ......
  • 7.20解决hive无法删除和修改的问题
    参考文献:hiveupdate和delete报错Attempttodoupdateordeleteusingtransactionmanager-CSDN博客 首先说明,hive数据库一般是增和查询用得比较多,不建议频繁的去修改删除,有悖hive数据库的初衷。废话不多说,开始配置,首先找到你的hive-site.xml的路径 一般来说是在hive的......