我的Kettle學習筆記(2)—日期維度表建立
阿新 • • 發佈:2021-11-17
一、流程圖
二、生產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,點選“資料庫欄位-獲取欄位”,調整對應的欄位
(此處資料庫表已事先建立,若沒建立可選擇其他匯入方式)