1. 程式人生 > 其它 >我的Kettle學習筆記(2)—日期維度表建立

我的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,點選“資料庫欄位-獲取欄位”,調整對應的欄位
(此處資料庫表已事先建立,若沒建立可選擇其他匯入方式)