目录
1、打开kettle工具,创建load_dim_date转换
1、打开kettle工具,创建load_dim_time转换
1、打开kettle工具,创建load_dim_staff转换
一、加载日期数据至日期维度表
1、打开kettle工具,创建load_dim_date转换
2、配置“生成记录”控件
双击“生成记录”控件,进入“生成记录”界面,在“限制”处添加生成的日期,默认为10,这里改为3650,即生成10年的日期(10*365);在“字段”框添加字段language、country_code、initial_date,对生成的日期进行初始化,然后单击“确定”按钮,完成配置,如下图所示:
3、配置“增加序列”控件
在该控件中“值的名称”处将valuename改为DaySequence,即增加一列日期字段,用于改变“生成记录”控件生成的日期,再单击“确定”按钮完成配置,如下图所示:
4、配置“JavaScript代码”控件
在该控件中勾选“兼容模式?”复选框,使得“JavaScript代码”控件的兼容性更强,并且在Java Script代码框中编写代码,再单击“确定”按钮完成配置,如下图 所示:
//生成locale、calendar
var locale=new java.util.Locale(language.getString(),country_code.getString());
var calendar=new java.util.GregorianCalendar(locale);
//设置时间、指定日历为当前日期
calendar.setTime(initial_date.getDate());
calendar.add(calendar.DAY_OF_MONTH,DaySequence.getInteger()-1);
//获取日期
var date=new java.util.Date(calendar.getTimeInMillis());
//生成短日期、中日期、长日期、全日期
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);
//简单格式化
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);
simpleDateFormat.applyPattern("MMMM");
var month_name=simpleDateFormat.format(date);
simpleDateFormat.applyPattern("MMM");
var month_abbreviation=simpleDateFormat.format(date);
simpleDateFormat.applyPattern("yy");
//设置年份,即年的格式为两位、四位
var year2=simpleDateFormat.format(date);
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;
单击“获取变量”按钮,将代码中定义的变量添加至字段框中,注意此处“data”字段的类型为“Date”类型,如下图所示:
5、配置“表输出”控件
首先连接数据库,单击右侧“浏览”按钮选中目标表为“dim_date”,再勾选“指定数据库字段”复选框,用于将维度表字段与JavaScript控件中的变量字段进行匹配,如下图所示:
单击“数据库字段”选项卡,弹出“数据库字段”选项卡界面,在该界面下单击“输入字段映射”按钮,弹出“映射匹配”对话框,依次选中“源字段”中的字段和“目标字段”中的字段进行匹配,如下图所示:
6、运行转换load_dim_date
7、查看维度表dim_date中的数据
二、 加载时间数据至时间维度表
1、打开kettle工具,创建load_dim_time转换
2、配置“生成记录”控件
双击进入该控件,在“限制”后的文本框添加24表示生成24条数据;在“字段”框添加生成字段的名称,字段类型以及默认值为0(后面生成记录2和生成记录3同样的原理,分别表示时:分:秒),如下图所示:
3、配置“增加序列”控件
4、 配置“JavaScript代码”控件
在该控件中勾选“兼容模式?”,然后在JavaScript代码框中编写如下代码:
//生成12小时格式
var hours12=hours24.getInteger()%12;
//生成AM,PM格式
var am_pm=hours24.getInteger()>12?"PM":"AM";
编写完成后点击“获取变量”按钮,将代码中定义的变量添加至字段框,如下图所示:
5、配置“生成记录2”控件
6、配置“增加序列2”控件
7、配置“生成记录3”控件
8、配置“增加序列3”控件
9、配置“JavaScript代码2”控件
勾选“兼容模式?”复选框,在JavaScript代码框中写入代码:
//生成time
var time=hours24.getInteger()+":"
+minutes.getInteger()+":"
+seconds.getInteger();
//time_key
var time_key=(hours24.getInteger()<10?"0":"")
+hours24.getInteger()+(minutes.getInteger()<10?"0":"")
+minutes.getInteger()+(seconds.getInteger()<10?"0":"")
+seconds.getInteger();
编写完成后点击“获取变量”按钮,将代码中定义的变量添加至字段框,如下图所示:
10、配置“表输出”控件
首先连接数据库,单击右侧“浏览”按钮选中目标表为“dim_time”,再勾选“指定数据库字段”复选框,用于将维度表dim_time中字段与JavaScript控件中的变量字段进行匹配,如下图所示:
单击“数据库字段”选项卡,弹出“数据库字段”选项卡界面,在该界面下单击“输入字段映射”按钮,弹出“映射匹配”对话框,依次选中“源字段”中的字段和“目标字段”中的字段进行匹配,如下图所示:
11、运行转换load_dim_time
12、查看维度表dim_time中的数据
三、加载员工数据至员工维度表
1、打开kettle工具,创建load_dim_staff转换
2、配置“表输入”控件
首先配置数据库连接,完成后单击“确定”按钮完成配置;然后在SQL框中编写如下SQL语句:
select
coalesce(max(staff_last_update),"1970-01-01 00:00:00")
max_dim_staff_last_update
from dim_staff
编写完成后预览如下:
3、配置“表输入2”控件
首先配置数据库连接,完成后单击“确定”按钮完成配置;然后在SQL框中编写如下SQL语句:
select
'staff_id',
'first_name',
'last_name',
'address_id',
'picture',
'email',
'stroe_id',
'active',
'username',
'password',
'last_update'
from staff where last_update > ?
从步骤插入数据选择“表输入”,编写完成预览如下:
4、配置“字段选择”控件
在该界面进入“选择/改名值”,在“元数据”选项卡的“需要改变元数据的字段”处添加字段active,由于维度表dim_staff中字段staff_active的数据类型为char类型,因此要将数据表staff中字段active的数据类型改为String,如下图所示
5、配置“值映射”控件
在该控件中将“使用的字段名”后的下拉列表中选择字段active;在“字段值”框中添加源值和目标值,这里将Y替换成Yes,将N替换成No,如下图所示
6、配置“维度查询/更新”控件
该控件中先配置数据库,完成后选择输出的目标表,即维度表dim_staff;在“关键字”选项卡处添加关键字字段staff_id,在“字段”选项卡处添加查询/更新字段;在“代理关键字段”后的下拉列表中选择staff_key,并指定“创建代理键”为使用自增字段;在“Version字段”后的下拉列表中选择staff_version_number;在“Stream日期字段”后的下拉列表中选择last_update;在“开始日期字段”后的下拉列表中选择staff_valid_from;在“截止日期字段”后的下拉列表中选择staff_valid_through,如下图所示:
7、运行转换load_dim_staff
运行结果显示如下显示