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

posted @ 2021-11-17 17:27  xiaojy  阅读(954)  评论(0)    收藏  举报