让决策更智能
新一代智能数据分析平台

Spark SQL日期处理函数及案例分享

观小远发表于:2021年08月25日 15:10:33更新于:2021年09月10日 10:11:29

1. 时间或日期截取函数——原字段为日期(date)或日期时间(datetime/timestamp), 返回非日期。

0016125fe34cf2bc58afe1419f93429

2. 时间或日期截取函数—— 原字段为日期(date)或日期时间(datetime/timestamp), 返回日期或时间

date_trunc(format, [字段]): 按照目标格式截取日期或日期时间后返回timestamp格式。

trunc([字段], format): 按照目标格式截取日期或日期时间后返回date格式。

可用格式format:

001612601d84901dad928afa258e088

Note: 不区分大小写; 引号必须是半角符号,单引号双引号都可以用; 天('day'/'dd')及以下单位不能用于trunc()。

0016125fe35482903ca621f1c25e944

3. 日期或时间日期生成函数

001613abec764f54f9aaf1cc71e273a

4. 日期时间计算

0016125fe3538b4652b0fa3637e193a

案例一:

数据集里一个字段为事件开始时间, 另一个字段为事件持续时间(分钟), 不同事件持续时间不同, 需要计算事件结束时间。此时用 [字段]+ INTERVAL 1 MINUTE这种方法不能计算出结束时间。

实现原理:unix_timestamp是把时间戳timestamp转换成一个以秒为单位计算得到的数值,可以方便地对时间戳进行数学计算。最后再把计算结果格式转换回timestamp。反之,计算两个时间的时间差也可以用同样方式。

实现方法:新建计算字段,格式为“日期和时间”,使用以下函数。

timestamp(unix_timestamp([开始时间])+[持续时间]*60);
to_timestamp(to_unix_timestamp([开始时间])+[持续时间]*60)

实现效果:

0016125fe3522e612b582e099a7559a

5. 日期与时间日期转化

0016125fe3540980cbfe7023bfb5cec

常用日期时间格式化的参数DateFormatter(注意区分大小写):

0016125fe3519c8112b9e3e4cbc1e61

更多的参数和用法请参考官方文档:https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html

案例二:

原来时间为东八区时间,需要转换为东九区时间, 偏移1个时区。

函数:

from_utc_timestamp([东八区时间],'UTC+1'); from_utc_timestamp([东八区时间],'GMT+1')

原理:把当前的东八区时间暂时当做世界标准时间,计算偏移1个时区的时间

转换前:2021-08-08 15:16:00             转换后:2021-08-08 16:16:00

案例三:文本类型日期转换为标准日期格式

001612627bb80959c6e8fa1a3d07cb7

案例四:标准日期转换为文本类型日期案例:

001612627bb637530fcc9eaf4522f41

案例五:

有一张包含一年内所有日期的表,如何找出每个月的第二个周二和周三的日期(观远学院月度产品培训日)?

实现方法:

1. 新建计算字段“周天”得到每天是星期几:dayofweek([日期]) -1

2. 新建计算字段“周数”得到每天的周天在每个月是第几次出现:date_format([日期],'F')

3. 筛选“周天”的范围为:大于等于2小于等于3,或者直接筛选2和3;

4. 筛选“周数”为2,得到一年内所有月的第二个周二和周三的日期。效果如下:

0016125ff2b53ce9ca797139fc91569



    您需要登录后才可以回复