Hive玩得好,头发就变少
Hive玩得好,头发就变少
- Hive
- 窗口函数
- Rank
- 日期函数
- 数据取整函数
- 常用字符串
- 常用集合函数
- grouping_set
- 压缩和存储
- TextFile
- Orc格式
- Parquet格式
Hive
窗口函数
窗口分析函数:窗口函数也称为OLAP函数,是对一组值进行操作,
不需要使用Group by子句对数据进行分组,
还能再同一行返回原来行的列和使用聚合函数得到的聚合列
over():指定分析函数工作的数据窗口大小,这个数据窗口大小可能回随着行的变而变化
current row 当前行
n preceding 往前n行数据
n following 往后n行数据
unbounded 起点
unbounded preceding 表示从前面的起点
following 表示从后面的终点
lag(col,n) 往前第n行数据
lead(col,n) 往后第n行数据
ntile(n) 把有序分区中的行分发到指定数据的组中,
各个组有编号,编号从1开始,
对于每一行,ntile返回此行所谓的组的编号。
查询在2022年3月购买过的顾客及总人数
select name,count(*) over()
from business
where substring(orderdate,1,7)='2022-03'
group by name;
查询顾客的购买明细及月购买总额
select name,orderdate,cost,sum(cost) over(partition by month(orderdate))
from business
每个顾客的cost按照日期进行累加
selectname.orderdate,cast,sum(cost) over(partiton by name order by orderdate)
from business
统计前面的1行到后面的1行的和 = 3行
between PRECEDING and FOLLOWING
从前面的某行到后面的某行selectname.orderdate,cast,sum(cost) over(partiton by name order by orderdate rows between 1 PRECEDING and 1 FOLLOWING)
from business
lag(orderdate,1,orderdate):获取上一行的数据,没有就给自己
统计顾客上次购买的日期selectname,orderdate,lag(orderdate,1,orderdate) over(partition by nameorder by orderdate)
frombusiness
lead(orderdate,1,orderdate):获取下一行的数据,没有就给自己
统计顾客下次购买的日期selectname,orderdate,lead(orderdate,1,orderdate) over(partition by name order by orderdate)
frombusiness
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值,
如果切片不均匀,默认增加第一个切片的分布select name,orderdate,cost,ntile(5) over(order by orderdate) groupID
frombusiness;查询前20%时间的订单信息
select name,orderdate,cost
from (select name,orderdate,cost,ntile(5) over(order by orderdate) groupIDfrombusiness) t1
where groupID = 1;
Rank
1、Rank() 排序相同时会重复,总数不会变
2、dense_rank() 排序相同时会重复,总数会减少
3、row_number() 会根据顺序计算
select *,rank() over(partiton by subject order by score) from scoreselect *,dense_rank() over(partiton by subject order by score) from scoreselect *,row_number() over(partiton by subject order by score) from score
日期函数
1、hive取得当前日期时间:
1.1) 取得当前日期:
select current_date();1.2) 取得当前日期时间:
select current_timestamp();1.3) hive取得当前时间戳:
select unix_timestamp();1.4) 时间戳转日期:
select from_unixtime(1517725479,‘yyyy-MM-dd HH:dd:ss’);1.5) 日期转unix时间戳:
select to_nuix_timestamp(‘2017-01-01 12:12:12’,‘yyyy-MM-dd HH:dd:ss’);1.6) hive取得当前时间:
select from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:dd:ss’);2、hive自动计算其他日期(昨天,今天):
hive中日期加减函数:date_add(start_date,num_days)2.1) 取得昨天日期:
select date_add(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),-1);
select date_sub(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),1);2.2) 取得明天日期:
select date_add(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),1);
select date_sub(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),-1);3、hive取得两个日期之间差值(差值为天数):
datediff(date1,date2):date1大于date2,返回值为正,否则,返回值为负。
select datediff(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),
date_add(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),-10));select datediff(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),
date_add(from_unixtime(unix_timestamp(),‘yyyy-MM-dd’),10));4、字符串转时间(字符串必须为:yyyy-MM-dd格式)
select to_date(‘2017-01-01 12:12:12’);5、日期、时间戳、字符串类型格式化输出标准时间格式:
select date_format(current_timestamp(),‘yyyy-MM-dd HH:mm:ss’);
select date_format(current_date(),‘yyyy-MM-dd’);
select date_format(‘2017-01-01’,‘yyyy-MM-dd HH:mm:ss’);
--字符串必须满足yyyy-MM-dd格式6、utc时间转换:
select from_utc_timestamp(current_timestamp(),8);
select to_utc_timestamp(current_timestamp(),8);
数据取整函数
ceil 向上取整 3.14 结果 3 3.54 4floor 向下取整 3.14 结果 33.54 3
常用字符串
upper 转大写
lower 转小写
length 长度
trim 前后去空格
lpad(str,10,‘a’) 向左补齐 超出字符串长度时 拼接默认的字符串a
rpad 向右补齐
regexp_replace
使用正则匹配目标字符串 regexp_replace(2022-03-12,‘-’,‘/’)将 - 替换成 /
常用集合函数
size 集合中元素的个数
map_keys 返回map中的key
map_values 返回map中的value
array_contains 判断array中是否包含某个元素
sort_array 将array中的元素进行排序
grouping_set
多维分析select deptid,gender,count(*)
from staff
group by deptid,gender
grouping sets((deptid,gender),deptid,gender,())
压缩和存储
行存储的特点
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,
行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快列存储的特点
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,
每个字段的数据类型一定是相同的,列示存储可以针对性的设计更好的设计压缩算法textFile和Sequencefile的存储格式都是基于行存储的
ORC和Parquet是基于列式存储的
TextFile
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用,但使用Gzip这种方式,
hive不会对数据进行切分,从而无法对数据进行并行操作
Orc格式
Orc是Hive引入的新的存储格式Orc文件由1个或多个stripe组成,每个stripe250MB大小,
这个stripe实际相当于RowGroup概念,
不过大小由4MB->250MB,这样应该能提升顺序读的吞吐率。
每个strope里有三个部分组成,分别是Index data,row Data,Stripe Footer:1、index data:一个轻量级的index,默认是每隔1w行做一个索引。
这里做的索引应该只是记录某行的各字段在row data中的offset2、row data:存的是具体的数据,先取部分行,然后对这些行按列进行存储。
对每个列进行了编码,分成多个stream来储存3、stripe footer:存的是各个stream的类型,长度等信息
Parquet格式
parquet是面向分析型业务的列式存储格式,由twitter和cloudera合作开发parquet文件时以二进制方式存储的,所以是不可以直接读取的,
文件中包含该文件的数据和元数据,因此parquet格式文件是自解析的通常情况下,在存储parquet数据时候会按照Block大小设置行组的大小,
由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,
这样可以把每个行组由一个Mapper任务处理,增大任务执行并行度。
HIVE 一般使用ORC文件格式配合snappy压缩使用
Hive玩得好,头发就变少相关推荐
- # hive打不开,提示节点过少,进入安全模式~~
hive打不开,提示节点过少,进入安全模式~~ 前段时候给电及除尘,因为经常拆着玩,越熟练越容易大意,一下子把电源排线扯坏了.挼了挼,想凑和着用吧,没想到不知怎么的就会关机,太频繁了.一怒之下取出来剪 ...
- 传世手游卡服务器维护,复古传世手游:这样玩,你会发现能少走很多弯路
原标题:复古传世手游:这样玩,你会发现能少走很多弯路 导读:喜欢玩传奇的朋友请关注公众号:<重返复古>,里面有多款传奇手游总有一款适合你! 相信不少刚开始玩<复古传世手游>的玩 ...
- 快过年了,博客园里的文章也变少了
快过年了,博客园里的文章也变少了,大家都开始休息了吗? 转载于:https://www.cnblogs.com/RobotTech/archive/2008/02/03/1063461.html
- android 扫码枪 字符数少掉,BarTender条码字符数莫名变少是怎么回事?
小伙伴们在使用BarTender 制作条码标签时,偶尔可能会发现制作的条码字符数变少了,为什么会这样呢?要怎么解决?本文小编就来教大家鉴定BarTender条码字符数变少的原因,并帮助小伙伴们解决问题 ...
- 10款超实用的程序员工具,工具用得好,头发掉的少
今天给大家分享10个程序员建议收藏的工具,老少皆宜,尤其是新手程序员,技术水平一时半会儿可能难以提升,需要持之以恒地学习和练习,但工具用得好,做事效率是可以快速提升的. 用好工具可以少动脑,工具用得好 ...
- mysql导入SQL表变少了
前言 今天在测试时,将开发库中的数据库,导入本地进行测试,右击新建的数据库--运行SQL文件,如下 以上方法,导致我的数据库中的表变少了. 经过查阅,找到了解决办法,我们在运行SQL文件时,需要将每个 ...
- SQL左连接数据变少
前一段时间,同学写sql碰到一个问题:两段sql连接看似一样,但是条数却不一样.原因是在左连接之后的where条件对数据进行了筛选,使得数据变少了.两段sql如下: select count(1)fr ...
- SQL左连接或者右连接数据变少
SQL左连接或者右连接数据变少: 主要看这两篇文章就可以: https://blog.csdn.net/lz_peter/article/details/83185909 https://blog.c ...
- 在PPT 2010“切换”效果变少,该如何处理?
问题的来龙去脉 在 PowerPoint 2010 编辑简报,使用[切换]效果时,发现变少了,该如何处理? 问题的发生原因 当[切换]效果变少时,请确认简报档格式是否为[*.pptx],如果您的简报档 ...
最新文章
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
- 从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering)
- mongodb-创建索引
- swoole 内存Memory
- Oracle EBS PO 接受入库
- ViewState机制的解析(转自csdn)
- html标记语言 --框架
- P4395-[BOI2003]Gem气垫车【树形dp,四色定理】
- httphost设置socks_socks5代理使用和安装配置
- 医疗项目 开源_医疗保健受开源影响最大的行业之一
- bartender实现即扫即打印功能扫描完后自动打印_日本彩色激光打印机推荐人气排名15款...
- B站项目资源过于敏感,稍后删,抓紧保存!!!
- 背景图片铺不满全屏时处理
- 接口与抽象类的应用(包括各自设计模式)
- 《计算机组成原理》唐朔飞第三版知识点总结
- MPQ8873电源芯片配置
- android怎么实现记住密码功能,Android学习笔记——记住密码的功能实现(一)
- win11任务栏(注册表修改/软件)完全透明-全网最详细教程
- Ubuntu安装Google拼音
- Win8 专业版安装Android Studio
热门文章
- 计算机课各种造型靠图形教案,三年级信息技术课老师教案参照三篇
- 使用C/C++的#include命令(文件包含命令)时,文件名用尖括号或双撇号(双引号)括起来的区别
- R语言 CART算法和C4.5算法(决策树)
- Hive中的map join、left semi join和sort merge bucket join
- Markdown排版微信公众号文章
- 个人看过较好的电影推荐
- pandas选取excel特定两列,上下行数值相减,降采样,缺失值处理,按数值范围去除行的处理,在pycharm画图实例
- Java类(无参、有参构造方法、静态变量)
- 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
- 常用的图像质量评估方法