![](https://img-blog.csdnimg.cn/20210223153456971.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
hive
hive的使用
永不落后于人
永远相信美好的事情即将发生
展开
-
Hive使用动态分区向表插入数据报错java heap space或者GC overhead limit exceeded
问题描述今天使用hive动台分区向表插入数据时,一直报错java heap space或者GC overhead limit exceeded。排查了好久,发现以下问题。1.表使用的是parquet存储格式(或者ORC)。2.虽然数据量很小,但是分区比较多。hive在进行多分区操作时,只启动map端任务,不启动reduce,再加上parquet格式的表会为每一个分区创建一个FileWriter,分区太多就会导致内存溢出。解决方案1.首先确定开启了动态分区和非严格模式。set hive.exec原创 2021-11-23 19:12:38 · 2749 阅读 · 0 评论 -
Hive求截止到当前日期累计消费金额或使用次数
说明经常遇到这种类型的问题:求截止到当前日期(或在此日期之前),某用户的累计消费金额或者累计使用次数。只要遇到截止到当前日期为止,就要想到窗口函数,因为最后求的是累积消费金额,就要使用sum(金额字段) over(partition by 用户 order by 日期字段)。场景题下面是力扣的一道SQL题,以此题为例:activity 表:编写一个 SQL 查询,同时报告每组玩家和日期,以及玩家到目前为止玩了多少游戏。也就是说,在此日期之前玩家所玩的游戏总数。最终结果如下:SQLSELE原创 2021-07-09 09:53:28 · 2432 阅读 · 0 评论 -
Hive COALESCE返回第一个不为NULL的值
coalesce(参数1,参数2…)coalesce()函数可以传不定数量的参数,返回这些参数中第一个不为null的值。示例SELECT COALESCE(tmp_login.user_id,tmp_cart.user_id,tmp_order.user_id) user_idFROM tmp_loginFULL OUTER JOIN tmp_cartON tmp_login.user_id = tmp_cart.user_idFULL OUTER JOI原创 2021-04-22 09:50:44 · 2907 阅读 · 0 评论 -
Hive日期处理函数的使用
date_format作用格式化日期。SELECT DATE_FORMAT('2021-04-21 16:42:00','yyyy-MM-dd');date_add作用对日期进行加(减)操作。SELECT DATE_FORMAT('2021-04-21 16:42:00','yyyy-MM-dd') dt1, DATE_ADD('2021-04-21',1) dt2, DATE_ADD('2021-04-21', -1) dt3;...原创 2021-04-21 16:51:20 · 336 阅读 · 0 评论 -
Hive nvl函数的使用
格式nvl(表达式1,表达式2)作用如果表达式1的值为空,返回表达式2的值;如果表达式1的值不为空,返回表达式1的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。示例CREATE TABLE stud2(id int,name string,gender string);INSERT INTO stud2 VALUES(1001,'zs','男'),(1002,'ls','女'),(1003,'ww',NULL);SELECT原创 2021-04-21 16:40:26 · 2021 阅读 · 0 评论 -
Hive collect_set函数的使用
作用将同一组中不同行的数据聚合为一个集合(无重复数据),如果想要保留重复数据,可以使用collect_list。示例-- 建表create table stud (name string, area string, course string, score int);-- 插入数据insert into table stud values('zhang3','bj','math',88),('li4','bj','math',99),('wang5','sh','chinese',92),('z原创 2021-04-21 16:24:15 · 2069 阅读 · 0 评论 -
HBase整合Hive
Hive与HBase的对比Hive的特点Hive是数据仓库,数据存储在HDFS上,方便使用HQL去管理。Hive适用于离线的数据分析和清洗工作,延迟比较高。Hive的语句最后还是转化为MR语句运行。HBase的特点HBase是列式存储非关系型数据库,用于存储结构化和非结构化数据。适用于单表的非关系型数据的存储,不适合做join等连接操作。数据以HFile的方式持久化,存储在HDFS上。以Region的形式被Region Server管理。延迟低,访问速度快,适用于在线业务。案例1原创 2021-03-02 12:52:13 · 164 阅读 · 0 评论 -
Hive实战练习
一、字段说明视频表字段备注详细描述video_id视频唯一id(String)11位字符串uploader视频上传者(String)上传视频的用户名Stringage视频年龄(int)视频在平台上的整数天category视频类别(Array)上传视频指定的视频分类length视频长度(Int)整形数字标识的视频长度views观看次数(Int)视频被浏览的次数rate视频评分(Double)满分5分Ratings原创 2021-02-22 16:31:02 · 568 阅读 · 3 评论 -
Hive优化
1.Fetch抓取设置为morehive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal。设置为more后,全局查找、字段查找、limit等都不走MR。2.开启Map join如果不指定map join或者不符合map join的条件,hive会将数据发送到reduce端进行join,容易发生数据倾斜。可以用map join把小表加载到内存中在map端进行join,避免reduce端join。开启m原创 2021-02-21 19:59:06 · 216 阅读 · 0 评论 -
Hive 动态分区的使用
1.开启hive动态分区set hive.exec.dynamic.partition=true;2.设置hive非严格模式set hive.exec.dynamic.partition.mode=nonstrict;默认是strict严格模式,至少要有一个静态分区。3.创建目标表对应分区表示例将下表按照location进行分区创建分区表CREATE TABLE dept_par(deptno int,dname string)PARTITIONED BY (location st原创 2021-02-21 19:46:05 · 1891 阅读 · 0 评论 -
Hive日期函数
CURRENT_DATE():获取系统当前时间。SELECT CURRENT_DATE();DATE_ADD():计算某一个日期后n天的日期SELECT DATE_ADD(CURRENT_DATE(),30);DATE_SUB():计算某一个日期前n天的日期SELECT DATE_SUB(CURRENT_DATE(),30);DATEDIFF():计算时间差,前面的日期大返回正数。SELECT DATEDIFF(CURRENT_DATE(),'2019-1-1');...原创 2021-02-21 11:06:19 · 651 阅读 · 0 评论 -
Hive内部表外部表如何进行相互转换
创建测试表CREATE TABLE test1(id int);CREATE EXTERNAL TABLE test2(id int);内部表转外部表:ALTER TABLE test1 SET TBLPROPERTIES(“EXTERNAL”=“TRUE”);外部表转内部表:ALTER TABLE test2 SET TBLPROPERTIES(“EXTERNAL”=“FALSE”);注意:"EXTERNAL"=“TRUE” 和 “EXTERNAL”=“FALSE” 为固定写法,代表是否原创 2021-02-19 11:52:52 · 451 阅读 · 0 评论 -
Hive建表语法及解释
建表语法:CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col原创 2021-02-19 12:42:06 · 620 阅读 · 0 评论 -
Hive3分区表增删改查
创建分区表create table student_par(id int,name string)partitioned by (class string) row format delimited fields terminated by '\t';加载数据load data local inpath '/opt/module/hive/datas/student.txt' into table student_par partition(class='class01');insert i原创 2021-02-19 17:01:53 · 211 阅读 · 0 评论 -
Hive3中order by、sort by、distribute by、cluster by的区别
区别order by :全局排序,所有的数据加载到同一个reduce中进行排序。reduce压力过大,处理很慢。sort by:局部排序,先通过set mapreduce.job.reduces=数字;指定reduce个数,每个reduce中数据有,通常和distribute by搭配使用。distribute by:指定进入不同reducer的规则。和sort by搭配使用。cluster by:当distribute by和sort by的字段一致时,就等同于cluster by。示例--原创 2021-02-20 10:40:27 · 120 阅读 · 0 评论 -
Hive3分区表和分桶表的区别及应用场景
区别建表时不同:创建表时分区字段不能直接写在表结构中,通过指定分区字段和类型的方式成为表结构;分桶表的字段必须写在表结构中,再指定分桶字段。-- 创建分区表create table stu_par3(id int,name string) partitioned by (class string)row format delimited fields terminated by '\t';-- 创建分桶表create table stu_buk(id int,name strin原创 2021-02-20 11:30:55 · 1032 阅读 · 0 评论 -
case when的使用
条件范围判断casewhen 字段 判断范围 then 表达式1when 字段 判断范围 then 表达式2…else 默认值endselect ename,sal,case when sal>=5000 then 'a' when sal>=3000 then 'b' when sal>=2000 then 'c' else 'd'endfrom emp;等值判断case 字段when 值1 then 表达式1when 值2 then 表达式2…原创 2021-02-20 13:58:05 · 135 阅读 · 0 评论 -
Hive3查看内置函数的命令
查看所有内置函数show functions;查看某类型函数show functions like ‘date’;查看函数的介绍与示例show function extended 函数名如:show function extended to_date;原创 2021-02-20 11:49:53 · 279 阅读 · 0 评论 -
Hive常用函数
1.替换空值nvl(字段,默认值)如果字段值非空返回字段值,如果字段为空返回默认值。select comm,nvl(comm,-1) from emp;+---------+---------+| comm | _c1 |+---------+---------+| NULL | -1.0 || 300.0 | 300.0 || 500.0 | 500.0 || NULL | -1.0 || 1400.0 | 1400.0 ||原创 2021-02-20 16:03:19 · 261 阅读 · 0 评论 -
Hive炸裂函数explode的使用
explode的作用将一行集合类型的数据炸裂为多行数据。格式lateral view explode(字段) 表别名 as 列别名如果字段类型是map:lateral view explode(字段) 表别名 as key别名,value别名示例有如下表数据+-------------------+----------------------+| movie_info.movie | movie_info.category |+-------------------+---------原创 2021-02-20 16:20:12 · 8438 阅读 · 0 评论 -
Hive 窗口函数的使用
over() :窗口函数,在括号中指定开窗条件,通常和聚合函数、排名函数一起使用。如果开窗条件为空,那么聚合的是过滤后的整张表。一个窗口函数就会启动一个MR程序。开窗条件PARTITION BY:指定分组条件。ORDER BY:指定组内排序条件。CURRENT ROW:当前行。n PRECEDING:前n行。n FOLLOWING:后n行。UNBOUNDED:无限的。UNBOUNDED PRECEDING 第一行,UNBOUNDED FOLLOWING最后一行。LAG(字段名,n):某一列原创 2021-02-21 10:48:06 · 1078 阅读 · 0 评论