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玩得好,头发就变少相关推荐

  1. # hive打不开,提示节点过少,进入安全模式~~

    hive打不开,提示节点过少,进入安全模式~~ 前段时候给电及除尘,因为经常拆着玩,越熟练越容易大意,一下子把电源排线扯坏了.挼了挼,想凑和着用吧,没想到不知怎么的就会关机,太频繁了.一怒之下取出来剪 ...

  2. 传世手游卡服务器维护,复古传世手游:这样玩,你会发现能少走很多弯路

    原标题:复古传世手游:这样玩,你会发现能少走很多弯路 导读:喜欢玩传奇的朋友请关注公众号:<重返复古>,里面有多款传奇手游总有一款适合你! 相信不少刚开始玩<复古传世手游>的玩 ...

  3. 快过年了,博客园里的文章也变少了

    快过年了,博客园里的文章也变少了,大家都开始休息了吗? 转载于:https://www.cnblogs.com/RobotTech/archive/2008/02/03/1063461.html

  4. android 扫码枪 字符数少掉,BarTender条码字符数莫名变少是怎么回事?

    小伙伴们在使用BarTender 制作条码标签时,偶尔可能会发现制作的条码字符数变少了,为什么会这样呢?要怎么解决?本文小编就来教大家鉴定BarTender条码字符数变少的原因,并帮助小伙伴们解决问题 ...

  5. 10款超实用的程序员工具,工具用得好,头发掉的少

    今天给大家分享10个程序员建议收藏的工具,老少皆宜,尤其是新手程序员,技术水平一时半会儿可能难以提升,需要持之以恒地学习和练习,但工具用得好,做事效率是可以快速提升的. 用好工具可以少动脑,工具用得好 ...

  6. mysql导入SQL表变少了

    前言 今天在测试时,将开发库中的数据库,导入本地进行测试,右击新建的数据库--运行SQL文件,如下 以上方法,导致我的数据库中的表变少了. 经过查阅,找到了解决办法,我们在运行SQL文件时,需要将每个 ...

  7. SQL左连接数据变少

    前一段时间,同学写sql碰到一个问题:两段sql连接看似一样,但是条数却不一样.原因是在左连接之后的where条件对数据进行了筛选,使得数据变少了.两段sql如下: select count(1)fr ...

  8. SQL左连接或者右连接数据变少

    SQL左连接或者右连接数据变少: 主要看这两篇文章就可以: https://blog.csdn.net/lz_peter/article/details/83185909 https://blog.c ...

  9. 在PPT 2010“切换”效果变少,该如何处理?

    问题的来龙去脉 在 PowerPoint 2010 编辑简报,使用[切换]效果时,发现变少了,该如何处理? 问题的发生原因 当[切换]效果变少时,请确认简报档格式是否为[*.pptx],如果您的简报档 ...

最新文章

  1. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
  2. 从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering)
  3. mongodb-创建索引
  4. swoole 内存Memory
  5. Oracle EBS PO 接受入库
  6. ViewState机制的解析(转自csdn)
  7. html标记语言 --框架
  8. P4395-[BOI2003]Gem气垫车【树形dp,四色定理】
  9. httphost设置socks_socks5代理使用和安装配置
  10. 医疗项目 开源_医疗保健受开源影响最大的行业之一
  11. bartender实现即扫即打印功能扫描完后自动打印_日本彩色激光打印机推荐人气排名15款...
  12. B站项目资源过于敏感,稍后删,抓紧保存!!!
  13. 背景图片铺不满全屏时处理
  14. 接口与抽象类的应用(包括各自设计模式)
  15. 《计算机组成原理》唐朔飞第三版知识点总结
  16. MPQ8873电源芯片配置
  17. android怎么实现记住密码功能,Android学习笔记——记住密码的功能实现(一)
  18. win11任务栏(注册表修改/软件)完全透明-全网最详细教程
  19. Ubuntu安装Google拼音
  20. Win8 专业版安装Android Studio

热门文章

  1. 计算机课各种造型靠图形教案,三年级信息技术课老师教案参照三篇
  2. 使用C/C++的#include命令(文件包含命令)时,文件名用尖括号或双撇号(双引号)括起来的区别
  3. R语言 CART算法和C4.5算法(决策树)
  4. Hive中的map join、left semi join和sort merge bucket join
  5. Markdown排版微信公众号文章
  6. 个人看过较好的电影推荐
  7. pandas选取excel特定两列,上下行数值相减,降采样,缺失值处理,按数值范围去除行的处理,在pycharm画图实例
  8. Java类(无参、有参构造方法、静态变量)
  9. 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
  10. 常用的图像质量评估方法