最近在《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》一书中看到了构建时间维度的kettle过程,进行一下学习记录。对kettle有兴趣的可以去看一下这本书,很不错的一本书。
整体
分解
Generate 1 years
生成一年的数据行
生成一年的数据行(365条),并生成几个常量。
initial_date设置初始日期是 2017-01-01
language_code 语言代码设置成en
country_code地区代码设置成gb
Day Sequence
生成自增序列
生成增增的序列数字,用以后面和initial_date相加生成一系列连续的日期数据。
预览该步骤的效果如下:
Day Sequence预览
Calculate Dimension Attributes
生成时间维度
在这个步骤中,步骤Day Sequence作为输入流,其字段被设置为js变量,用来计算不同的日期。
步骤中,首先将序列号和initial_date相加,生成日历对象,然后,通过js表达式将其转换成不同的日期和日期的各个部分。同时。还适用js表达式生成智能主键,用于区别dim_date中的数据。
js表达式使用了语言和国家地区代码(在步骤Generate 1 years中设置)来完成对日期做本地化设置。例如,国家代码是CN且语言代码是zh,日期为2017-01-01被格式化为2017年1月1日 星期日。国家代码是gb且语言代码是en,日期2017-01-01将被格式化为Sunday, 1 January 2017。
具体代码如下:
//Create a Locale according to the specified language code
var locale = new java.util.Locale(
language_code.getString()
, country_code.getString()
);
//Create a calendar, use the specified initial date
var calendar = new java.util.GregorianCalendar(locale);
ca