我的Kettle学习笔记(2)—日期维度表创建
一、流程图

二、生产10年日期记录
1,新建转换-输入-生成记录
2,生产初始日期,在字段按以下格式输入“initial_date”

三、增加日期序列
1,点击“转换-增加序列”
2,定义值的名称为“DaySquence”

四、生成日期属性
1,点击“脚本-JavaScript代码”
2,将以下代码复制即可:
//set local
var locale = new java.util.Locale(language.getString(),country_code.getString());
//set calendar
var calendar = new java.util.GregorianCalendar(locale);
//设置时间
calendar.setTime(initial_date.getDate());
//根据序列实现日期递增
calendar.add(calendar.DAY_OF_MONTH,DaySquence.getInteger()-1);
//get the calendar data
var date = new java.util.Date(calendar.getTimeInMillis())
// ----到此可运行查看date字段
// 通过dataformat类生成短日期、中日期、长日期
var date_short = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT,locale).format(date);
var date_medium = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM,locale).format(date);
var date_long = java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG,locale).format(date);
var date_full = java.text.DateFormat.getDateInstance(java.text.DateFormat.FULL,locale).format(date);
// day in year,in month,
var simpleDateFormat = java.text.SimpleDateFormat("D",locale);
var day_in_year = simpleDateFormat.format(date);
// 建立格式器
simpleDateFormat.applyPattern("d");
var day_in_month = simpleDateFormat.format(date);
// 获取星期名称
simpleDateFormat.applyPattern("EEEE");
var day_name = simpleDateFormat.format(date);
// 星期的缩写
simpleDateFormat.applyPattern("E");
var day_abbreviation = simpleDateFormat.format(date);
// 一年的第几周
simpleDateFormat.applyPattern("ww");
var week_in_year = simpleDateFormat.format(date);
// 一个月的第几周
simpleDateFormat.applyPattern("W");
var week_in_month = simpleDateFormat.format(date);
//月份
simpleDateFormat.applyPattern("MM");
var month_number = simpleDateFormat.format(date);
//月份名称: "September"
simpleDateFormat.applyPattern("MMMM");
var month_name = simpleDateFormat.format(date);
//月份缩写: "Sep"
simpleDateFormat.applyPattern("MMM");
var month_abbreviation = simpleDateFormat.format(date);
// 两位的年份
simpleDateFormat.applyPattern("yy");
var year2 = simpleDateFormat.format(date);
//四位的年份 2007
simpleDateFormat.applyPattern("yyyy");
var year4 = "" + simpleDateFormat.format(date);
// 季度
var quarter_name = "Q";
var quarter_number;
switch(parseInt(month_number)){
case 1: case 2: case 3: quarter_number = "1"; break;
case 4: case 5: case 6: quarter_number = "2"; break;
case 7: case 8: case 9: quarter_number = "3"; break;
case 10: case 11: case 12: quarter_number = "4"; break;
}
quarter_name += quarter_number;
// 判断是否周的第一天,最后一天
var yes = "yes";
var no = "no";
var first_day_of_week = calendar.getFirstDayOfWeek();
var day_of_week = java.util.Calendar.DAY_OF_WEEK;
// 判断是否为周的第一天
var is_first_day_in_week;
if(first_day_of_week==calendar.get(day_of_week)){
is_first_day_in_week = yes;
} else {
is_first_day_in_week = no;
}
// 判断周的最后一天
calendar.add(calendar.DAY_OF_MONTH,1);
var next_day = new java.util.Date(calendar.getTimeInMillis());
var is_last_day_in_week;
if(first_day_of_week==calendar.get(day_of_week)){
is_last_day_in_week = yes;
} else {
is_last_day_in_week = no;
}
// 月的第一天和最后一天
// 是否为月的第一天
var is_first_day_in_month;
if(day_in_month == 1){
is_first_day_in_month = yes;
} else {
is_first_day_in_month = no;
}
// 是否为月的最后一天
var is_last_day_in_month;
if(java.text.SimpleDateFormat("d",locale).format(next_day)==1){
is_last_day_in_month = yes;
} else {
is_last_day_in_month = no;
}
//年季度
var year_quarter = year4 + "-" + quarter_name;
//年月份
var year_month_number = year4 + "-" + month_number;
var year_month_abbreviation = year4 + "-" + month_abbreviation;
//日期代理键
var date_key = year4 + month_number + (day_in_month<10?"0":"") + day_in_month;
3,点击“获取变量”,查看字段名称
4,在字段名称中删除字段“local,calendar,simpleDateFormat,yes,no,next_day,day_of_week”;
5,将字段“date”的类型改为“Date”;
五,加载数据到Mysql
1,点击“输出-表输出”
2,数据库连接,连接已有数据库或新建,选择目标表

3,点击“数据库字段-获取字段”,调整对应的字段
(此处数据库表已事先创建,若没创建可选择其他导入方式)


浙公网安备 33010602011771号