使用Kettle生成日期维度数据
需求:
- 为了后续分析销售订单金额、订单笔数的周环比、周同比、月环比、月同比,需要提前使用Kettle生成时间维度工具(环比是相邻比较,同比是历史同期比较)
- 按照以下字段生成 2019年一年的日期维度数据
分析: - 日期使用 Canlendar、SimpleDateFormat,编写Javascript脚本实现
- 国家法定节假日实现,需要往http://api.goseek.cn/Tools/holiday?date=20190102 年月日,发送请求,获取结果,以下为该REST API接口简介
1、接口地址:http://api.goseek.cn/Tools/holiday?date=数字日期,支持https协议。 2、返回数据:正常工作日对应结果为 0,,休息日对应结果为 1, 法定节假日对应结果为 2 3、节假日数据说明:本接口包含2017年起的中国法定节假日数据,数据来源国务院发布的公告,每年更新1次,确保数据 最新4、示例: http://timor.tech/api/holiday/info/2018-03-02 返回数据: {“code”:0,“type”:{“type”:0,“name”:“周五”,“week”:5},“holiday”:null} { “code”: 0, // 0服务正常。-1服务出错 “type”: { “type”: enum(0, 1, 2,3), // 节假日类型,分别表示 工作日、周末、节日、调休。 “name”: “周六”, // 节假日类型中文名,可能值为 周一 至 周日、假期的名字、某某调休。 “week”: enum(1 - 7) // 一周中的第几天。值为 1 - 7,分别表示 周一 至 周日。 },“holiday”: { “holiday”: false, // true表示是节假日,false表示是调休 “name”: “国庆前调休”, // 节假日的中文名。如果是调休,则是调休的中文名,例如’国庆前调休’ “wage”: 1, // 薪资倍数,1表示是1倍工资 “after”: false, // 只在调休下有该字段。true表示放完假后调休,false表示先调休再放假 “target”: ‘国庆节’ // 只在调休下有该字段。表示调休的节假日 } }
增加序列
Javascript代码
Http Client组件(5个并行度)
JSON Input
Switch/case
字段映射为常量
工作日
法定节假日
节假日调休补班
休息日
字段选择
Hadoop File Output
组件配置
1、生成记录组件
配置限制为 365
2、配置增加序列组件
3、Javascript组件,生成基本时间维度数据
//初始日期
var initStr = "2019-01-01";
//转为日期对象
var dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd");
var initDate = dateFormat.parse(initStr);
//获取日历对象
var calendar = java.util.Calendar.getInstance();
//设置日历的时间就是我们的初始时间
calendar.setTime(initDate);
//使用日历加减天,变换日期
calendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
//获取增加一天之后的日期
var newDate = calendar.