• 售前

  • 售后

热门帖子
入门百科

日期转换与时间戳转换(spark与persto的区别)

[复制链接]
123457321 显示全部楼层 发表于 2022-1-13 10:13:42 |阅读模式 打印 上一主题 下一主题
日期转换与时间戳转换

注释:时间戳是没有时区的概念的
1 spark

1.1时区设置

  1. set spark.sql.session.timeZone=GMT+8; --设置为东八区时间
  2. set spark.sql.session.timeZone=UTC; --设置为UTC时间
复制代码
1.2时间戳格式化为日期

  1. from_unixtime(floor(ts/1000),'yyyy-MM-dd')
  2. --注释,使用此方法转换时间时,默认使用的是集群的时区(时区设置参考1.1)
  3. --次函数的时间戳为10位的
复制代码
1.3时间戳跨时区转换日期(集群时区与要转换的目的时区不一致问题)

假设集群默认时区UTC时区,要转化为东八区时间
方法一(需要指定时区):

  1. 1 在spark-sql中执行
  2. set spark.sql.session.timeZone=GMT+8; --设置为东八区时间
  3. 2 select from_unixtime(floor(ts/1000),'yyyy-MM-dd') ...
复制代码
获取一个时间戳


  1. --在不指定时区的情况下,默认转换为集群时区时间(错误的结果)
  2. select from_unixtime(1627354133,'yyyy-MM-dd HH:mm:ss')
  3. --结果
  4. from_unixtime(CAST(1627354133 AS BIGINT), yyyy-MM-dd HH:mm:ss)
  5. 2021-07-27 02:48:53
  6. --设置东八区
  7. set spark.sql.session.timeZone=UTC;
  8. select from_unixtime(1627354133,'yyyy-MM-dd HH:mm:ss');
  9. --结果
  10. spark-sql> set spark.sql.session.timeZone=GMT+8;
  11. key        value
  12. spark.sql.session.timeZone        GMT+8
  13. from_unixtime(CAST(1627354133 AS BIGINT), yyyy-MM-dd HH:mm:ss)
  14. 2021-07-27 10:48:53
复制代码
方法二(不需要设置时区):

  1. select from_utc_timestamp(from_unixtime(1627354133,'yyyy-MM-dd HH:mm:ss'),'GMT+8')
  2. --结果
  3. from_utc_timestamp(CAST(from_unixtime(CAST(1627354133 AS BIGINT), yyyy-MM-dd HH:mm:ss) AS TIMESTAMP), GMT+8)
  4. 2021-07-27 10:48:53
复制代码
1.4日期格式转换

  1. select from_unixtime(unix_timestamp('20210704','yyyymmdd'),'yyyy-mm-dd') ;--2021-07-04
  2. --零时区转换任意时区的时间
  3. from_utc_timestamp(from_unixtime(ts/1000,'yyyy-MM-dd HH:mm:ss'),tz)
复制代码
1.5动态指定时区转换

  1. --tz为数据中的时区参数,在使用该方法是需要将集群时区指定为UTC
  2. set spark.sql.session.timeZone=UTC;
  3. select
  4. from_utc_timestamp(from_unixtime(ts/1000,'yyyy-MM-dd HH:mm:ss'),'GMT+8') as db
  5. ,from_utc_timestamp(from_unixtime(ts/1000,'yyyy-MM-dd HH:mm:ss'),tz) as biz,ts,tz
复制代码
2 presto-sql

1时间戳转换日期
  1. format_datetime(from_unixtime(cast(ts as bigint)/1000,'GMT+8'),'yyyy-MM-dd')
复制代码
  1. format_datetime(from_unixtime(cast(ts as bigint)/1000,'GMT+8'),'yyyy-MM-dd')
复制代码
来源:https://blog.caogenba.net/a18033860865/article/details/122448231
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作