目录

  • 0- 描述
  • 1- 问题一

0- 描述

描述:时间序列–构造日期

1- 问题一

描述:直接使用SQL实现一张日期维度表,包含以下字段:

create table if not exists dim_date ( date_id                   string         comment '日期(yyyymmdd)'
,datestr                   string         comment '日期(yyyy-mm-dd)'
,date_name                 string         comment '日期名称中文'
,weekid                    int            comment '周(0-6,周日~周六)'
,week_cn_name              string         comment '周_名称_中文'
,week_en_name              string         comment '周_名称_英文'
,week_en_nm                string         comment '周_名称_英文缩写'
,yearmonthid               string         comment '月份id(yyyymm)'
,yearmonthstr              string         comment '月份(yyyy-mm)'
,monthid                   int            comment '月份id(1-12)'
,monthstr                  string         comment '月份'
,month_cn_name             string         comment '月份名称_中文'
,month_en_name             string         comment '月份名称_英文'
,month_en_nm               string         comment '月份名称_简写_英文'
,quarterid                 int            comment '季度id(1-4)'
,quarterstr                string         comment '季度名称'
,quarter_cn_name           string         comment '季度名称_中文'
,quarter_en_name           string         comment '季度名称_英文'
,quarter_cn_nm             string         comment '季度名称_简写中文'
,quarter_en_nm             string         comment '季度名称_简写英文'
,yearid                    int            comment '年份id'
,year_cn_name              string         comment '年份名称_中文'
,year_en_name              string         comment '年份名称_英文'
,month_start_date          string         comment '当月1号(yyyy-mm-dd)'
,month_end_date            string         comment '当月最后日期(yyyy-mm-dd)'
,month_timespan            int            comment '月跨天数'
,week_of_year              int            comment '当年第几周'
,workday_flag              string         comment '是否工作日(周一至周五Y,否则:N)'
,weekend_flag              string         comment '是否周末(周六和周日Y,否则:N)'
)comment '日期维度表'
stored as parquet;

参考答案:

insert overwrite table dim_date select  date_id ,datestr ,concat(yearid,'年',monthid,'月',substr(datestr,9,2),'日') as date_name,weekid ,case weekid when 0 then '星期日'when 1 then '星期一'when 2 then '星期二'when 3 then '星期三'when 4 then '星期四'when 5 then '星期五'when 6 then '星期六'end as week_cn_name,case weekid when 0 then 'Sunday'when 1 then 'Monday'when 2 then 'Tuesday'when 3 then 'Wednesday'when 4 then 'Thurday'when 5 then 'Friday'when 6 then 'Saturday'end as week_en_name,case weekid when 0 then 'Sun'when 1 then 'Mon'when 2 then 'Tues'when 3 then 'Wed'when 4 then 'Thur'when 5 then 'Fri'when 6 then 'Sat'end as week_en_nm,substr(date_id,1,6) as yearmonthid,substr(datestr,1,7) as yearmonthstr,monthid,concat(yearid,'年',monthid,'月') as monthstr,concat(monthid,'月') as month_cn_name,case monthid when 1 then 'January'when 2 then 'February'when 3 then 'March'when 4 then 'April'when 5 then 'May'when 6 then 'June'when 7 then 'July'when 8 then 'August'when 9 then 'September'when 10 then 'October'when 11 then 'November'when 12 then 'December'end as month_en_name,case monthid when 1 then 'Jan'when 2 then 'Feb'when 3 then 'Mar'when 4 then 'Apr'when 5 then 'May'when 6 then 'Jun'when 7 then 'Jul'when 8 then 'Aug'when 9 then 'Sept'when 10 then 'Oct'when 11 then 'Nov'when 12 then 'Dec'end as month_en_nm,quarterid,concat(yearid,quarterid) as quarterstr,concat(yearid,'年第',quarterid,'季度') as quarter_cn_name,concat(yearid,'Q',quarterid) as quarter_en_name,case quarterid when 1 then '第一季度'when 2 then '第二季度'when 3 then '第三季度'when 4 then '第四季度'end as quarter_cn_nm,concat('Q',quarterid) as quarter_en_nm,yearid ,concat(yearid,'年') as year_cn_name,yearid as year_en_name,month_start_date,month_end_date,datediff(month_end_date,month_start_date) + 1 as month_timespan,week_of_year ,case when weekid in (1,2,3,4,5) then 'Y' else 'N' end as workday_flag,case when weekid in (0,6) then 'Y' else 'N' end as weekend_flag
from
(select   from_unixtime(unix_timestamp(datestr,'yyyy-MM-dd'),'yyyyMMdd') as date_id,datestr as datestr,pmod(datediff(datestr, '2012-01-01'), 7)  as weekid,concat(substr(datestr,1,4),substr(datestr,6,2)) as yearmonthid,substr(datestr,1,7) as yearmonthstr,cast(substr(datestr,6,2) as int) as monthid,case when cast(substr(datestr,6,2) as int) <= 3 then 1 when cast(substr(datestr,6,2) as int) <= 6 then 2when cast(substr(datestr,6,2) as int) <= 9 then 3when cast(substr(datestr,6,2) as int) <= 12 then 4end as quarterid,substr(datestr,1,4) as yearid ,date_sub(datestr,dayofmonth(datestr)-1) as  month_start_date  --当月第一天,last_day(date_sub(datestr,dayofmonth(datestr)-1)) month_end_date --当月最后一天,weekofyear(datestr) as week_of_yearfrom (select date_add('1900-01-01',t0.pos) as datestrfrom (select posexplode(split(repeat('o', datediff(from_unixtime(unix_timestamp('20501231','yyyymmdd'),'yyyy-mm-dd'), '1900-01-01')), 'o')) ) t0) t ) A
;

总结:以上代码可以生成数仓维表

hiveSQL面试题16__时间序列--构造日期相关推荐

  1. [hiveSQL面试题2]

    hiveSQL面试题整理学习(2) 一.示例数据:某网店用户访问表部分数据(user_id:用户ID,shop:店铺名,表名:visit)如下 (一)需求:每个店铺访问次数Top3的访客信息(输出店铺 ...

  2. [hiveSQL面试题3]

    hiveSQL面试题整理学习(3) 一.示例数据:交易信息表数据如下(表名:trans_info) (一)需求:用一条sql语句得出下列结果 二.示例数据:客户持仓表表数据如下(表名:stock_in ...

  3. 怎么传日期参数_时间序列amp;日期学习笔记大全(下)

    作者:湛林 来源:凹凸数据 时间序列&日期学习笔记大全(上) 建议收藏 9. 日期 时间的组成 dt.方法,具体参数及含义详见附件 # 可以通过s.dt.time 获得各种信息s.dt.yea ...

  4. 只保留日期_时间序列:日期范围、频率与偏移量

    Pandas中的时间序列一般被认为是不规则的,也就是说,它们没有固定的频率.但是,它常常需要以某种相对固定的频率进行分析,比如每日.每月.每15分钟等(这样自然会在时间序列中引入缺失值).Pandas ...

  5. sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  6. sql 大于某个日期_图解面试题:如何比较日期数据?

    [题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意思 ...

  7. 【博学谷学习记录】超强总结,用心分享|HiveSQL面试题实战(二)|详细的步骤解析

    文章目录 第6题:电商购买金额统计实战 数据准备 请用sql写出所有用户中在今年10月份第一次购买商品的金额 第7题:教育领域SQL实战 表结构 (1)创建图书管理库的图书.读者和借阅三个基本表的表结 ...

  8. SQL重叠交叉区间问题分析--HiveSQL面试题30

    目 录 0 需求分析 1 数据准备 2 数据分析 3 小 结 0 需求分析 如下为平台商品促销 数据: 字段为品牌,打折开始日期,打折结束日期 id  stt  edt oppo 2021-06-05 ...

  9. sql server 中获取前一天日期_图解面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  10. HIveSQL面试题52:近一个月发布的视频中热度最高的top3视频【抖音面试题,不得不去吐槽的一个题目】

    目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 现有用户-视频互动表tb_user_video_log id uid video_id start_time end_time ...

最新文章

  1. 2018年中国人工智能100强研究报告
  2. 用C#和本地Windows API操纵系统菜单
  3. 转-D3D中的四元数
  4. 我的世界梦之边缘5服务器在维护吗,8月5日服务器例行维护公告(已完成)
  5. javascript数据结构-栈
  6. 漫画:如何给女朋友解释什么是“锟斤拷”?
  7. PANIC: Could not open: AVD
  8. NOIP模拟赛20161016R2
  9. java编程思想笔记(一)——面向对象导论
  10. java jni 生成_利用javah技术生成jni接口的详细步骤 | 学步园
  11. 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例
  12. 微信服务商开发能力说明文档怎么写
  13. 《从底层结构开始学习FPGA》目录与传送门
  14. oracle经典50题及答案,Oracle经典练习题及标准答案
  15. Docker 学习前置,网络IP地址以及交互
  16. 1114:【白细胞计数】
  17. lr中的lr_output_message,Lr_debug_message,Lr_error_message,Lrd_stmt,Lrd_fetch函数
  18. 机械跨考计算机调剂,机械跨考经济的一点心得
  19. xshell文件传输乱码_在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法...
  20. Unity计算着色器 01

热门文章

  1. 在博客中添加动漫美女的js
  2. 清明时节雨纷纷,路上行人欲断魂; 清明,请为逝去的亲人捎去祝福!
  3. Android Recovery OTA升级(二)—— Recovery源码解析
  4. 小程序获取附近IBeacon设备
  5. JavaWeb——RequestResponse笔记
  6. 将一个文件夹下的多个目录生成txt文本,并且写入到Excel中
  7. #创新应用#飞流下载:下载娱乐两不误
  8. 曹雪芹的诗歌鸿蒙,曹雪芹的诗
  9. spring security实现注解式权限管理时不成功,注解@Secured 无效
  10. 关于3阶Volterra滤波器一些理解