
hive
鸭梨山大哎
life hard take it easy
展开
-
HiveServer2入门到熟悉
HiveServer2 (HS2) 是一个服务器接口,它使远程客户端能够对 Hive 执行查询并检索结果(此处介绍更详细的 )。当前基于 Thrift RPC 的实现是HiveServer 的改进版本,支持多客户端并发和身份验证。它旨在为开放 API 客户端(如 JDBC 和 ODBC)提供更好的支持。启动在启动hiveserver2之前,需要启动hadoop以及yarn.hiveserver2是个命令,可以查看其位置[root@mypc01 ~]# which hiveserver2/usr/l原创 2020-11-26 08:50:43 · 572 阅读 · 0 评论 -
Hive求周累计
一般的周累计selectdim1,dim2,weekofyear(day) as inc_week,count(*) as numfrom agroup by dim1,dim2,inc_week递进式每天的周累计with t1 as (selectdim1,dim2,weekofyear(day) as inc_week,from a)select dim1,dim2,count(*) over(partition by dim1,dim2,inc_week orde原创 2021-08-12 22:35:38 · 1271 阅读 · 0 评论 -
Hive实现笛卡尔积
如下方式可以实现笛卡尔积select * from a left join b on 1=1假设a表100行,b表20万行,则笛卡尔积后为100 * 20 w=2000 w行假设a表100行,b表20万*60行,则笛卡尔积后为100 * 60*20 w=12亿行假设a表1000行,b表20万行,则笛卡尔积后为1000 * 20 w=20000 w行=2亿行严重影响执行效率...原创 2021-08-12 22:27:52 · 3988 阅读 · 0 评论 -
Hive日期格式转换
目的把'20210405'转换为'2021-04-05'select from_unixtime(unix_timestamp('20210405','yyyyMMdd'),'yyyy-MM-dd')--2021-04-05原创 2021-08-12 09:33:01 · 857 阅读 · 0 评论 -
Hive求周环比
关键是找到上一周的同一天select date_sub ('2020-02-23', 7);--2020-02-16至于其他的就简单了原创 2021-08-12 09:28:47 · 453 阅读 · 0 评论 -
Hive 求月环比
SELECT ADD_MONTHS('2021-05-03', 3) FROM DateTest;-- 2021-08-03SELECT ADD_MONTHS('2021-05-03',-3) FROM DateTest;-- 2021-02-03这个有什么用呢?求环比的时候用得上原创 2021-08-12 09:19:10 · 350 阅读 · 0 评论 -
Hive按日加减
date_add(str date, int number of days)select date_add ('2020-02-23', 4);--2020-02-27注意 日期的格式不能是20200223这种格式,识别不了date_sub(str date, int number of days)select date_sub ('2020-02-23', 4);--2020-02-19参考Date Functions in Hive | How Does Date Function原创 2021-08-12 09:13:58 · 3933 阅读 · 0 评论 -
Hive lag函数使用注意
lag函数用来查找先前的值,但是要注意当第一个值查找前一个值时就没有了,这个在实际应用中需要注意,因为取数一般是有一定分区的.比如取昨天的数求环比,就要确保昨天的数都在取数范围内select *,lag(cost,1,0) over (distribute by name sort by orderdate) `pre cost` from t_order;...原创 2021-08-10 20:03:30 · 669 阅读 · 0 评论 -
hive分区数过多报错
Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. Maximum was set to 100 partitions per node,原创 2021-08-04 14:29:32 · 991 阅读 · 0 评论 -
Hive不等值连接
不等值连接不能用on,要用where,本质是先笛卡尔积,再过滤比如-- 语法错误select * from a left join b on a.id<b.id--正确select * from a left join b where a.id<b.id原创 2021-07-29 21:18:32 · 1181 阅读 · 4 评论 -
Hive集合函数
注意size(null)=-1-- 报错size(1)原创 2021-07-29 21:17:02 · 160 阅读 · 0 评论 -
Hive修改列名
-- 修改列名 表名 旧列名 新列名 新类型ALTER TABLE my_table CHANGE name myname double;-- 修改后历史数据为null 需要如下解决ALTER TABLE my_table SET TBLPROPERTIES ('parquet.column.index.access' = 'true');原创 2021-07-01 21:02:46 · 4661 阅读 · 0 评论 -
Hive 字符串转日期
如下演示了将类似'20210807'字符串转为日期并减去7天的方法方法1select date_sub(to_date(concat_ws('-',substr('20210807',0,4),substr('20210807',5,2),substr('20210807',7,2))),7)方法2select date_sub(from_unixtime(unix_timestamp('20210608','yyyyMMdd'),'yyyy-MM-dd'),7)...原创 2021-05-18 22:50:51 · 17803 阅读 · 1 评论 -
hive判断是否包含
hive判断是否包含– 返回字符串 substr 在 str 中从 pos 后查找,首次出现的位置-- 1 a在abcda中首次出现的位置select locate('a','abcda') -- 3select locate('cd','abcda') -- 0 0表示在a中找不到abcdaselect instr('a','abcda')-- 3 表示abcda中cd从位置3开始select instr('abcda','cd') 总结instr和locate都可以判断sub原创 2021-04-07 19:32:54 · 1820 阅读 · 0 评论 -
hive获取本周第几天
2.2 以下版本select date_format(from_unixtime(unix_timestamp('20210325','yyyyMMdd'),'yyyy-MM-dd'),'u')或者select date_format(concat_ws('-', substr('20210325', 0, 4), substr('20210325', 5, 2), substr('20210325', 7, 2)),'u')原创 2021-03-25 19:09:58 · 1049 阅读 · 0 评论 -
Hive利用增量表更新全量表
需求要求将只存在于u1而不存在于u2的的ID记录全部插入u2中,并用u1中的记录更新u2中相同ID的记录。不要被题目误导了,这个应该先更新数据,然后再插入,不要被题目的顺序误导数据源drop table u1;create table if not exists u1( id int, name string) row format delimited fields terminated by ',';drop table u2;creat原创 2021-02-28 12:50:24 · 2151 阅读 · 1 评论 -
Hive 星型模型入门
星型模是一种多维的数据关系,它由一个事实表和一组维表组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。这也是我们在使用hive时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过join来组合数据,相对来说对OLAP的分析比较方便。...原创 2021-02-26 17:27:52 · 963 阅读 · 2 评论 -
Hive 执行计划之Reduce Output Operator
此处Reduce Output Operator 值得是map端,还没要reduce端,不要搞混淆了,只是把map的结果输出给reduce端Reduce Output Operator 输出结果给Reduce ,常见的属性sort order 升序还是降序key expressions 依据什么进行排序value expressions 结果列+ 正序排序不排序++按两列正序排序,如果有两列+- 正反排序,如果有两列-反向排序explain select sum(sal) from原创 2021-02-26 13:42:03 · 526 阅读 · 0 评论 -
Hive执行计划之 Group By Operator
Group By Operator 分组聚合, 常见的属性aggregations、分组是为了哪个聚合函数mode , 一般是hash,对keys计算hashkeys 当没有keys属性时只有一个分组。outputColumnNames 输出的临时列名举个例子 explain select sum(sal) from tb_emp;查看其Group By Operator+----------------------------------------------------------原创 2021-02-26 13:24:30 · 631 阅读 · 0 评论 -
Hive查看执行计划
可以用explain查看执行计划比如explain select deptno `dept`, year(hiredate) `year`, sum(sal)from tb_empgroup by deptno, year(hiredate);1 可以先看有几个stage比如这个例子有2个+------------------------------------+|Explain |+----------原创 2021-02-26 13:12:13 · 2604 阅读 · 0 评论 -
Hive group by后面不能用列别名
比如,如下是会报错的,year这个别名此时还是不能用的select deptno `dept`, year(hiredate) `year`, sum(sal)from tb_empgroup by deptno,year;org.apache.hadoop.hive.ql.parse.SemanticException:Line 5:16 Invalidtable alias or column reference ‘year’: (possible column原创 2021-02-26 12:51:15 · 1330 阅读 · 0 评论 -
Hive什么时候可以用别名?
举个例子,求各部门工资和总工资的比例1 首先求各部门工资以及总工资select deptno, sum(sal) over (distribute by deptno) `d_dal`, sum(sal) over() `total_sal`from tb_emp;2 求比例如下写法是错误的,此时还不能用别名select deptno, sum(sal) over (distribute by deptno) `d_sal`, sum(s原创 2021-02-26 12:38:11 · 2618 阅读 · 0 评论 -
Hive增加一列固定值
需求同时查出各部门的工资以及公司的总工资with a as ( select sum(sal) `total sal` from tb_emp)select deptno, sum(sal) over (distribute by deptno), a.`total sal`from tb_emp,a;执行结果+------+-----+---------+|deptno|c1 |total sal|+------+-----+---------+|NUL原创 2021-02-26 12:23:41 · 3234 阅读 · 0 评论 -
Hive面试题练习
drop table tb_emp;create table tb_emp( empno int, ename string, job string, mgr int, hiredate string, sal float, comm float, deptno int) row format delimited fields terminated by ',';load d原创 2021-02-26 10:24:20 · 247 阅读 · 0 评论 -
Hive 入门练习题
1.用一条SQL语句查询出每门课都大于80分的学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90select namefrom studentgroup by namehaving min(fenshu) > 80;2. 学生表 如下:自动编号 学号 姓名 课程编原创 2021-02-25 16:05:32 · 523 阅读 · 0 评论 -
Hive练习之join
1)有三张表分别为会员表(member)销售表(sale)退货表(regoods)(1)会员表有字段memberid(会员id,主键)credits(积分);(2)销售表有字段memberid(会员id,外键)购买金额(MNAccount);(3)退货表中有字段memberid(会员id,外键)退货金额(RMNAccount)。2)业务说明(1)销售表中的销售记录可以是会员购买,也可以是非会员购买。(即销售表中的memberid可以为空);(2)销售表中的一个会员可以有多条购买记录;(3)退原创 2021-02-25 14:52:49 · 273 阅读 · 0 评论 -
Hive insert into小文件问题
测试数据CREATE TABLE `test_small`( `dist_id` int COMMENT '区组id', `account` string COMMENT '账号', `gold` int COMMENT '金币') row format delimited fields terminated by ',';插入两条数据insert into table test_small values ('1','11',100006);insert原创 2021-02-25 13:45:45 · 1199 阅读 · 2 评论 -
Hive查询各自区组的money排名前十的账号
有一个账号表如下,请写出SQL语句,查询各自区组的money排名前十的账号(分组取前10)1)建表(MySQL)CREATE TABLE `test_ten_account`( `dist_id` int COMMENT '区组id', `account` string COMMENT '账号', `gold` int COMMENT '金币') row format delimited fields terminated by ',';insert int原创 2021-02-25 12:54:04 · 1912 阅读 · 4 评论 -
Hive 求得所有用户和活跃用户的总数及平均年龄
有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户)日期 用户 年龄数据集2019-02-11,test_1,232019-02-11,test_2,192019-02-11,test_3,392019-02-11,test_1,232019-02-11,test_3,392019-02-11,test_1,232019-02-12,test_2,192019-02-13,test_1,232019-02-15,test_2,1920原创 2021-02-25 11:43:58 · 1199 阅读 · 4 评论 -
Hive练习求给出2017年1月的新客数
已知一个表STG.ORDER,有如下字段:Date,Order_id,User_id,amount请给出sql进行统计:数据样例:2017-01-01,10029028,1000003251,33.57。2017-01-02,10029028,1000003251,33.57。2017-01-03,10029028,1000003251,33.57。1)给出 2017年每个月的订单数、用户数、总成交金额。2)给出2017年11月的新客数(指在11月才有第一笔订单)建表create t原创 2021-02-25 10:56:40 · 1556 阅读 · 2 评论 -
hive left join入门
准备数据u1文件中的数据如下:1,a2,b3,c4,d7,y8,uu2文件中的数据如下:2,bb3,cc7,yy9,ppcreate table if not exists u1(id int,name string)row format delimited fields terminated by ',';create table if not exists u2(id int,name string)row format delimited fiel原创 2021-02-24 21:12:12 · 4464 阅读 · 1 评论 -
Hive 中 insert into 与with as连用
写法如下,注意insert into的位置with a as (select * from few_ints where x = 2)insertinto few_intsselect *from a;如下写法是会报错的insert into few_intswith a as (select * from few_ints where x = 2)select *from a;报错信息如下org.apache.hadoop.hive.ql.parse.ParseExceptio原创 2021-02-24 19:18:18 · 9354 阅读 · 0 评论 -
Hive union vs union all
UNION和UNION ALL都将两个不同SQL的结果连接在一起。差异:UNION删除重复项,而UNION ALL不会删除重复项。 UNION操作从结果集中消除了重复的行,但是UNION ALL在加入后返回所有行。UNION ALL比UNION快。 需要其他工作才能删除重复项。 为了删除重复项,必须对结果集进行排序,这可能会影响UNION的性能,具体取决于要排序的数据量。UNION结果集按升序排序,而UNION ALL结果集未排序例外 :在现实世界中,诸如Internet之类的网络是瓶颈,在这原创 2021-02-24 18:43:47 · 749 阅读 · 0 评论 -
事务事实表入门
事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务记录一条记录。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。只有当天数据才会进入当天的事实表中,相当于每个分区里面都是每天的数据,不包含之前的数据。事务事实表的日期维度记录的是事务发生的日期,它记录的事实是事务活动的内容。为什么事务事实表具有稀疏性质?事实表一般围绕着度量来建立,当度量产生的时候,事实记录就生原创 2021-02-24 16:01:00 · 505 阅读 · 0 评论 -
使用hive计算每一年的最大气温的日期+温度
数据解析:比如:2010012325表示在2010年01月23日的气温为25度。需求:现在要求使用hive,计算每一年的最大气温的日期+温度。效果如下:20010105 2920070109 9920080103 3720100103 1720120107 3220130109 2920140103 1720150109 99原始数据如下2014010114201401原创 2021-02-23 20:28:48 · 591 阅读 · 0 评论 -
Hive编写连续7天登录的总人数:
编写连续7天登录的总人数:数据: t1表Uid dt login_status(1登录成功,0异常) 1 2019-07-11 1 1 2019-07-12 1 1 2019-07-13 1 1 2019-07-14 1 1 2019-07-15 1 1 2019-07-16 1 1 2019-07-17 1 1 2019-07-18 1 2 2019-07-11 1 2 2019-07-12 1 2 2019-07-13 0 2 2019-07-14 1 2 2019-07-原创 2021-02-23 19:58:07 · 469 阅读 · 0 评论 -
Hive date_format函数入门
date_format 的语法: date_format(date/timestamp/string ts, string fmt)举几个例子select date_format('2015-04-08', 'y');2015select date_format('2015-04-08', 'yyyy');2015select date_format('2015-04-08', 'yyyy-MM');2015-04select date_format('2015-04-08 10:10:原创 2021-02-23 19:27:10 · 37869 阅读 · 0 评论 -
Hive 使用SQL统计出每个用户的累积访问次数
我们有如下的用户访问数据userId visitDate visitCountu01 2017/1/21 5u02 2017/1/23 6u03 2017/1/22 8u04 2017/1/20 3u01 2017/1/23 6u01 2017/2/21 8U02 2017/1/23 6U01 2017/2/22 4要求使用SQL统计出每个用户的累积访问次数,如下表所示:用户id 月份 小计 累积u01 2017-01 11 11u01 2017-02 12 23u02 201原创 2021-02-23 18:50:37 · 3624 阅读 · 1 评论 -
Hive找出所有科目成绩都大于某一学科平均成绩的学生
表结构:uid,subject_id,score求:找出所有科目成绩都大于某一学科平均成绩的学生数据集如下1001 01 901001 02 901001 03 901002 01 851002 02 851002 03 701003 01 701003 02 701003 03 851)建表语句create table score( uid string, subject_id string, score int)row format delimite原创 2021-02-23 17:48:37 · 1926 阅读 · 1 评论 -
Hive 求全局Top N
有一个线上服务器访问日志格式如下(用sql答题)时间 接口 ip地址2016-11-09 11:22:05 /api/user/login 110.23.5.332016-11-09 11:23:10 /api/user/detail 57.3.2.16.....2016-11-09 23:59:40 /api/user/log原创 2021-02-23 16:16:00 · 273 阅读 · 1 评论