select floor((unix_timestamp(substr('201402',1,6),'yyyyMM')-unix_timestamp(substr('20141112',1,6),'yyyyMM'))/2629495);
解释:
格式:两个时间的格式自己随意指定
数字2629495解释。一年有365天4小时58分56秒。折算下秒数再除以12,得到2629495。
然后自己理解下这个数字就明白了。
1日期函数UNIX时间戳转日期函数: from_unixtime语法:from_unixtime(bigint unixtime[, stringformat])
返回值: string
说明: 转化UNIX时间戳(从1970-01-0100:00:00 UTC到指定时间的秒数)到当前时区的时间格式
举例:
hive> select from_unixtime(1323308943,'yyyyMMdd') from dual;
20111208
2获取当前UNIX时间戳函数: unix_timestamp语法: unix_timestamp()
返回值: bigint
说明: 获得当前时区的UNIX
函数说明:
NVL :给值为 NULL 的数据赋值,
它的格式是
NVL( string1, replace_with)。
它的功能是如果string1 为 NULL,则 NVL 函数返回 replace_with 的值,否则返回 string1 的值,如果两个参数都为 NULL ,则返回NULL。
date_format:格式化时间
date_add:时间跟天数相加
date_sub:时间跟天数相减,类似与add,使用一个就ok
select date_sub('2019-06-29',5);
datediff:两个时间相减
select datediff('2019-06-29','2019-06-24');
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。
分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL, 返回值也将为 NULL。
这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
select concat_ws('-',str1,str2) from XX; //str为string类型的列名
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,
产生 array 类型字段。
练习:把星座和血型一样的人归类到一起
第一步转换:
白羊座,A 孙悟空
射手座,A 大海
白羊座,B 宋宋
白羊座,A 猪八戒
射手座,A 凤姐
合并
EXPLODE(col):将hive 一列中复杂的 array 或者 map 结构拆分成多行。
LATERAL VIEW //侧写
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和 split, explode 等UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
练习:将**分类中的数组数据展开
select explode(category) from movie_info;
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化;
/ 在over(里面使用) /
CURRENT ROW:当前行;
n PRECEDING:往前 n 行数据;
n FOLLOWING:往后 n 行数据;
UNBOUNDED:起点,
UNBOUNDED PRECEDING 表示从前面的起点,UNBOUNDEDFOLLOWING 表示到后面的终点;
/ 在over外面使用/
LAG(col,n):往前第n 行数据;
LEAD(col,n):往后第 n 行数据;
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从 1 开始,
对于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。
数据:
一、查询在 2017 年 4 月份购买过的顾客及总人数
group分组一组一个值,over给每一条数据独立开窗
查询顾客的购买明细及购买总额
要将 cost 按照日期进行累加
先排序
再累加
查询顾客上次的购买时间
下次的购买时间
查询前 20%时间的订单信息
RANK() 排序相同时会重复,总数不会变,可以并列
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
练习:计算每门学科成绩排名
计算每门学科成绩排名
1,如果让你计算5月21号这个日期前3天到后面3天的数据和?(不只是5月21号这一天,所有天的前3天加上后3天的和)
2,对于组内排序的顺序问题?(值相等的时候,排序也相等或是跳过)
需要使用hive的ROWS BETWEEN函数,也叫做WINDOW函数
其中SUM、AVG、MIN、MAX。用于实现分组内所有和连续累积的统计。
如果不指定ROWS BETWEEN,默认为从起点到当前行;
如果不指定ORDER BY,则将分组内所有值累加;
关键是理解ROWS BETWEEN含义,也叫做WINDOW子句:
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点
–其他AVG,MIN,MAX,和SUM用法一样。
以上内容转再来自 http://lxw1234com/archives/2015/07/367htm
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)