hiveSQL面试题16__时间序列--构造日期
目录
- 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__时间序列--构造日期相关推荐
- [hiveSQL面试题2]
hiveSQL面试题整理学习(2) 一.示例数据:某网店用户访问表部分数据(user_id:用户ID,shop:店铺名,表名:visit)如下 (一)需求:每个店铺访问次数Top3的访客信息(输出店铺 ...
- [hiveSQL面试题3]
hiveSQL面试题整理学习(3) 一.示例数据:交易信息表数据如下(表名:trans_info) (一)需求:用一条sql语句得出下列结果 二.示例数据:客户持仓表表数据如下(表名:stock_in ...
- 怎么传日期参数_时间序列amp;日期学习笔记大全(下)
作者:湛林 来源:凹凸数据 时间序列&日期学习笔记大全(上) 建议收藏 9. 日期 时间的组成 dt.方法,具体参数及含义详见附件 # 可以通过s.dt.time 获得各种信息s.dt.yea ...
- 只保留日期_时间序列:日期范围、频率与偏移量
Pandas中的时间序列一般被认为是不规则的,也就是说,它们没有固定的频率.但是,它常常需要以某种相对固定的频率进行分析,比如每日.每月.每15分钟等(这样自然会在时间序列中引入缺失值).Pandas ...
- sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?
[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...
- sql 大于某个日期_图解面试题:如何比较日期数据?
[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意思 ...
- 【博学谷学习记录】超强总结,用心分享|HiveSQL面试题实战(二)|详细的步骤解析
文章目录 第6题:电商购买金额统计实战 数据准备 请用sql写出所有用户中在今年10月份第一次购买商品的金额 第7题:教育领域SQL实战 表结构 (1)创建图书管理库的图书.读者和借阅三个基本表的表结 ...
- SQL重叠交叉区间问题分析--HiveSQL面试题30
目 录 0 需求分析 1 数据准备 2 数据分析 3 小 结 0 需求分析 如下为平台商品促销 数据: 字段为品牌,打折开始日期,打折结束日期 id stt edt oppo 2021-06-05 ...
- sql server 中获取前一天日期_图解面试题:如何比较日期数据?
[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...
- HIveSQL面试题52:近一个月发布的视频中热度最高的top3视频【抖音面试题,不得不去吐槽的一个题目】
目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 现有用户-视频互动表tb_user_video_log id uid video_id start_time end_time ...
最新文章
- 2018年中国人工智能100强研究报告
- 用C#和本地Windows API操纵系统菜单
- 转-D3D中的四元数
- 我的世界梦之边缘5服务器在维护吗,8月5日服务器例行维护公告(已完成)
- javascript数据结构-栈
- 漫画:如何给女朋友解释什么是“锟斤拷”?
- PANIC: Could not open: AVD
- NOIP模拟赛20161016R2
- java编程思想笔记(一)——面向对象导论
- java jni 生成_利用javah技术生成jni接口的详细步骤 | 学步园
- 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例
- 微信服务商开发能力说明文档怎么写
- 《从底层结构开始学习FPGA》目录与传送门
- oracle经典50题及答案,Oracle经典练习题及标准答案
- Docker 学习前置,网络IP地址以及交互
- 1114:【白细胞计数】
- lr中的lr_output_message,Lr_debug_message,Lr_error_message,Lrd_stmt,Lrd_fetch函数
- 机械跨考计算机调剂,机械跨考经济的一点心得
- xshell文件传输乱码_在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法...
- Unity计算着色器 01