Hive学习之一 ——时间日期相关

时间戳相关

1.获取设备中的当前时间戳

--int格式的时间戳。
select unix_timestamp();
--输出:1580988970

--string类型的时间戳。
select current_timestamp();
--输出:2020-09-17 14:16:31.658

2.时间戳格式化

--int时间戳转string类型时间戳。
select from_unixtime(1580988970,'yyyy-mm-dd hh:mm:ss');
--输出:2020-06-06 05:06:10

--毫秒时间戳转string类型时间戳
select from_unixtime(cast(1580988970000/1000 as bigint),'yyyy-mm-dd hh:mm:ss');
-->输出:2020-06-06 05:06:10
--ps:这里必须要转bigint,不然会报错

--string时间戳转int类型时间戳
select unix_timestamp('2020-06-06 05:06:10');
-->输出:1591400170

select unix_timestamp('20200907 13:01:03','yyyyMMdd HH:mm:ss')
--输出:1599483663

select unix_timestamp('2020-09-07 13:01:03','yyyyMMdd HH:mm:ss')
--输出:NULL

--ps:这里不知道为什么时间不一样,没有深究,机器有毒。

3.获取时间戳的年月日时分秒

--获取时间戳的年
select year(from_unixtime(1591400170));
select year('2020-09-10 09:10:20');
select year('2020-09-10');
--输出:2020

select year('20200910');
--输出NULL

--获取时间戳的月
select month(from_unixtime(1591400170));
select month('2020-06-10 09:10:20');
select nonth('2020-06-10');
--输出:6

--获取时间戳的日期
select day(from_unixtime(1591400170));
select day('2020-06-06 09:10:20');
select day('2020-06-6');
--输出:6

--获取时间戳的时
select hour(from_unixtime(1591400170));
select hour('2020-06-06 23:09:20');
--输出:23

--获取时间戳的分
select minute(from_unixtime(1591400170));
select minute('2020-06-06 23:36:20');
--输出:36

--获取时间戳的秒
select second(from_unixtime(1591400170));
select second('2020-06-06 23:36:10');
--输出:10

String转Date

可以参考以下链接 String To Date 大全


获取特殊日期

1.获取当月第一天

select trunc('2020-09-10','MM');
--输出:2020-09-01

2.获取当月最后一天

select last_day('2020-09-10');
--输出:2020-09-30
select last_day('2020-09-10 10:20');
--输出:2020-09-30
select last_day('2020-09-10 10:20:00');
--输出:2020-09-30

3.判断当天是本年第几周

select weekofyear('2020-09-17');
--输出:38

4.判断当天是本周第几天

 select pmod(datediff('2020-09-17','1920-01-01')-3,7);
--输出:4

日期函数

1.日期比较函数: datediff语法: datediff(string enddate,string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数。
例如:

select datediff('2020-09-20','2020-09-10');
--输出:10

select datediff('2020-09-20','2020-09-9');
--输出:11

select datediff('2020-09-20','20200909');
--输出:NULL

select datediff('2020-09-10','2020-09-20');
--输出:-10

2.日期增加函数: date_add语法: date_add(string startdate, intdays)
返回值: string
说明: 返回开始日期startdate增加days天后的日期
例如:

select date_add('2020-09-10',3);
--输出:2020-09-13

select date_add('2020-09-10',-3);
--输出:2020-09-07

select date_add('20200910',3);
--输出:NULL

3.日期减少函数: date_sub语法: date_sub (string startdate,int days)
返回值: string

说明: 返回开始日期startdate减少days天后的日期。
例如:

select date_sub('2020-09-10',3);
--输出:2020-09-07

select date_sub('2020-09-10',-3);
--输出:2020-09-13

select date_sub('20200910',3);
--输出:NULL

使用业务场景

1.对于工作日,需要看每周的周几在app的dau用户最多,以此确认每周周几更适合做一些运营活动

select
	--周几
	pmod(datediff(from_unixtime(unix_timestamp(cast(dt as string),'yyyymmdd'),'yyyy-mm-dd'),'1920-01-01')-3,7) as week_day
	--人数
	,count(distinct userid) as uv
	--几周
	,count(1) as cnt
from db_name.table_name
where dt>=20200803
	and dt<=20200913
group by
	pmod(datediff(from_unixtime(unix_timestamp(cast(dtas string),'yyyymmdd'),'yyyy-mm-dd'),'1920-01-01')-3,7)

2.需要看最后一次活跃日期离当前日期的差值的用户分布

select
	datediff(from_unixtime(unix_timestamp(cast(dt as string),'yyyymmdd'),'yyyy-mm-dd'),from_unixtime(unix_timestamp(cast(last_active_time as string),'yyyymmdd'),'yyyy-mm-dd')) as active_diff
	,count(distinct userid) as uv
from db_name.table_name
where dt=20200916
group by
	datediff(from_unixtime(unix_timestamp(cast(dt as string),'yyyymmdd'),'yyyy-mm-dd'),from_unixtime(unix_timestamp(cast(last_active_time as string),'yyyymmdd')))

持续更新

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Hive是一个大数据分析的开源平台,它提供了很多的综合应用案例,其中之一是用户学历查询。用户学历查询案例中,我们可以使用Hive从数据仓库中读取关于用户的数据,然后通过分析和聚合这些数据,来确定用户的学历信息。在这个过程中,Hive提供了强大的SQL语句支持,以及丰富的函数库,可以满足各种复杂的分析需求。 ### 回答2: 近日,一家大型人力资源公司因为工作中频繁查询员工学历信息而决定使用hive技术来进行数据的处理和分析,通过hive的综合应用,实现了更加高效便捷的用户学历查询。 此次项目中,该公司首先进行了数据清洗和处理,将员工学历相关信息从不同的数据源中收集并整合,统一存储在hive的数据仓库中。接着,通过hiveQL语言对数据进行查询和筛选,实现了仅需几秒钟即可得到用户学历信息的目标。使用hive的好处是能够快速处理海量数据,提高查询效率,同时还能实现数据分析和统计,并可视化展示数据结果。 在具体的操作中,该公司将原始数据进行拆分和转换,把不同的表进行组合和分析。同时,在处理数据过程中还运用了一些hadoop生态体系的其他组件,比如pig和spark等工具,以提高效率和处理这些数据所需的时间。在处理完成之后,用户可以通过hive对用户的学历进行查询,根据自己的需要,可以根据职位、学历、工作年限等限定条件来查询,大大地提高了查询精度,也让招聘和人事等相关部门的工作变得更加轻松便捷。 总的来说,该项目成功运用了hive技术,实现了用户学历查询的目标,提升了工作效率和数据查询的准确度。而且此次项目的经验和教训也可以为其他公司和企业在hive技术的运用方面提供借鉴和参考。 ### 回答3: Hive是Hadoop生态系统中的一项重要技术,它是基于Hadoop的MapReduce框架的数据仓库解决方案,可以进行大规模数据的存储和处理。而学历查询是一个典型的数据查询场景,由于学历查询需要对大量的数据进行快速高效的查询和分析,因此使用Hive进行学历查询可以大大提高查询效率和数据处理能力。 以学历查询为例,如果我们需要查询某个区域内所有人的学历情况,我们需要从海量的数据中筛选出相关的信息,然后进行分析和统计,这个过程需要耗费大量的时间和精力。但是如果使用Hive,我们可以通过Hive的SQL查询语句来快速实现数据查询和分析。 具体来说,如果我们要查询一个城市的所有居民的学历情况,首先要准备好相应的数据表或数据集,然后利用Hive相关命令将数据导入到Hive表中。在数据导入完成后,我们可以使用类似于SQL的语句来实现查询。例如,我们可以使用Hive的SELECT语句和GROUP BY语句来实现按学历等级进行分组并统计各组的人数。 当然,如果需要更加复杂的查询和分析任务,我们也可以使用Hive进行更多的数据处理和计算任务。例如,Hive支持使用自定义的UDF函数,可以对数据实现更加灵活和精细化的处理。 总而言之,Hive作为一种分布式数据存储和查询解决方案,可以为学历查询等数据处理场景提供快速、高效和可扩展的解决方案。通过合理的数据分析和查询,可以帮助我们更好地了解数据背后的真相,为业务决策提供更多有效的参考和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个猫崽子和你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值