一、加载用户数据至用户维度表

操作介绍

通过Kettle工具加载用户数据至用户维度表dim_customer。

操作步骤

(1)、打开kettle工具,创建转换
使用Kettle工具,创建一个转换load_dim_customer,并添加表输入控件、映射控件、字段选择控件、值映射控件、维度查询/更新控件以及Hop跳连接线,具体如图所示。
在这里插入图片描述

(2)、配置表输入控件
双击“表输入”控件,进入“表输入”配置界面,单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。MySQL数据库连接的配置,如图所示。
在这里插入图片描述
在SQL框中编写用于获取字段customer_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_customer_last_update;单击“预览”按钮,查看临时字段max_dim_customer_last_update是否将默认值设置为“1970-01-01 00:00:00”,如图所示。
在这里插入图片描述
(3)、配置表输入2控件
双击“表输入2”控件,进入“表输入”配置界面,单击【新建】按钮,配置数据库连接。在SQL框中编写SQL语句,用于获取数据库sakila中数据表customer中的最新数据,如图所示。
在这里插入图片描述
(4)、打开Kettle工具,新建转换
使用Kettle工具,创建一个转换fetch_address(该转换为转换load_dim_customer的子转换),并添加映射输入规范控件、数据库查询控件、过滤记录控件、JavaScript代码控件、字段选择控件以及Hop跳连接线,如图所示。
在这里插入图片描述
(5)、配置映射输入规范控件
双击“映射输入规范”控件,进入“Mapping input specification”界面,并添加映射的字段“address_id”,该字段为传递的参数(由于转换load_dim_customer中表输入2控件流获取的字段address_id,用于查询用户的地址信息,而后续数据仓库的维度表数据也需要用户的地址信息,因此这里将字段address_id作为传递的参数),添加完毕后单击【确定】按钮,完成“映射输入规范”控件的配置,如图所示。
在这里插入图片描述
(6)、配置数据库查询控件
双击“数据库查询”控件,进入“数据库查询”配置界面,单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。MySQL数据库连接的配置,如图所示。
在这里插入图片描述
单击名右侧的【浏览】按钮,添加数据表address;在“查询所需的关键字”框中,添加查询所需的关键字字段address_id,由于该字段是唯一的,因此可作为数据表address中数据和映射输入规范控件流中数据的比较条件;在“查询表返回的值”框中,添加查询表返回的值,如图所示。
在这里插入图片描述
(7)、配置数据库查询2控件
双击“数据库查询2”控件,进入“数据库查询”界面,单击【新建】按钮,配置数据库连接,单击表名处的【浏览】按钮,添加数据表city;在“查询所需的关键字”框中,添加查询所需的关键字字段city_id,作为数据表city中数据和数据库查询2控件流中数据相比较的条件;在“查询表返回的值”框中,添加查询表返回的值,如图所示。
在这里插入图片描述
(8)、配置数据库查询3控件
双击“数据库查询3”控件,进入“数据库查询”配置界面,单击【新建】按钮,配置数据库连接,单击表名处的【浏览】按钮,添加数据表country;在“查询所需的关键字”框中,添加查询所需的关键字字段country_id,用于指定字段流与表字段的数据进行比较的比较条件;在“查询表返回的值”框中,添加查询表返回的值,如图所示:
在这里插入图片描述
(9)、配置过滤记录控件
双击“过滤记录”控件,进入“过滤记录”配置界面,在“条件”处设置过滤的条件,对有第二个地址的用户进行过滤操作;单击左边“”框,弹出字段对话框,选择要过滤的字段address2,如图所示。
在这里插入图片描述
单击“=”框,弹出函数对话框,选择过滤条件(这里选择的是IS NOT NULL),即过滤指定字段中不为空的数据,单击【确定】按钮,完成过滤条件的选择。字段address2的过滤设置如图所示。
在这里插入图片描述
在“发送true数据给步骤:”处的下拉框中选择“JavaScript代码”,将有第二个地址的用户放在JavaScript控件中,用于后续的操作;在“发送false数据给步骤:”处的下拉框中选择“字段选择”,将没有第二地址的用户过滤掉,如图所示。
在这里插入图片描述
(10)、配置JavaScript代码控件
双击“JavaScript代码”控件,进入“JavaScript代码”配置界面,勾选“兼容模式?”处的复选框,使得JavaScript代码控件的兼容性更强;在Java Script代码框中编写代码,如图所示。
在这里插入图片描述

var address = address.getString() + " " + address2.getString();

(11)、配置字段选择控件
双击“字段选择”控件,进入“选择/改名值”界面,在“元数据”选项卡的“移除”处添加要移除的字段,如图所示。
在这里插入图片描述
(12)、配置映射控件
双击“映射”控件,进入“映射”界面,单击“转换”选项卡处的【Browser】按钮,选择添加转换fetch_address,用于获取用户的地址信息,如图所示。
在这里插入图片描述
(13)、配置字段选择控件
双击步骤1中的“字段选择”控件,进入“选择/改名值”界面,在“元数据”选项卡的“需要改变元数据的字段”处添加字段active,由于数据表customer中字段active的类型为tinyint,因此需要将字段active的类型改为String,与维度表dim_customer中字段customer_active的类型相对应,如图所示。
在这里插入图片描述
(14)、配置值映射控件
双击步骤1中的“值映射”控件,进入“值映射”界面,在“使用的字段名”处的下拉框选择字段active;在“字段值”框中,添加源值和目标值,由于数据表customer中字段active的值为1和0,对应的是Y和N,这里将Y替换成Yes,将N替换成No,如图所示。
在这里插入图片描述
(15)、配置维度查询/更新控件
双击“维度查询/更新”控件,进入“维度查询/更新”界面,单击【新建】按钮,配置数据库连接,单击目标表右侧的【浏览】按钮,选择输出的目标表,即维度表dim_customer;在“关键字”选项卡处添加关键字字段customer_id,用于指定维度表字段和流字段的比较条件,如图所示:
在这里插入图片描述
在“字段”选项卡处添加查询/更新字段;在“代理关键字段”处的下拉框中选择customer_key为代理关键字段,并指定“创建代理键”是使用自增字段;在“Version字段”处的下拉框中选择customer_version_number;在“Stream日期字段”处的下拉框中选择last_update;在“开始日期字段”处的下拉框中选择customer_valid_from;在“截止日期字段”处的下拉框中选择customer_valid_through,如图所示。
在这里插入图片描述
(16)、运行load_dim_customer转换
单击转换工作区顶部的运行按钮,运行创建的转换load_dim_customer,实现加载用户数据至用户维度表dim_customer中,如图所示。
在这里插入图片描述

二、加载商店数据至商店维度表

操作介绍

通过Kettle工具加载商店数据至商店维度表dim_store。

操作步骤

(1)、打开Kettle工具,创建转换
使用Kettle工具,创建一个转换load_dim_store,并添加表输入控件、映射控件、数据库查询控件、维度查询/更新控件以及Hop跳连接线,具体如图所示。
请添加图片描述
(2)、配置表输入控件
双击“表输入”控件,进入“表输入”配置界面,单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。MySQL数据库连接的配置,如图所示。
在这里插入图片描述
在SQL框中编写SQL语句,用于获取字段store_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_store_last_update;单击“预览”按钮,查看临时字段max_dim_store_last_update是否将默认值设置为“1970-01-01 00:00:00” ,如图所示。
在这里插入图片描述
(3)、配置表输入2控件
双击“表输入2”控件,进入“表输入”配置界面,单击【新建】按钮,配置数据库连接,配置完成后单击【确认】按钮。MySQL数据库连接的配置,如图所示。
在这里插入图片描述
在SQL框中编写SQL语句,用于获取sakila数据库中store数据表中的最新数据,如图所示。
在这里插入图片描述
(4)、配置映射控件
双击“映射”控件,进入“映射”界面,单击“转换”选项卡处的【Browser】按钮,选择添加转换fetch_address,用于获取用户的地址信息,如图所示。
在这里插入图片描述
(5)、配置数据库查询控件
双击“数据库查询”控件,进入“数据库查询”配置界面,单击【新建】按钮,配置数据库连接。单击表名右侧的【浏览】按钮,添加staff数据表,用于查询商店员工的信息;在“查询所需的关键字”框中,添加查询所需的关键字staff_id,用于指定表字段和流字段的比较条件;在“查询表返回的值”框中,添加查询表返回的值,即员工姓名,如图所示。
在这里插入图片描述
(6)、配置维度查询/更新控件
双击“维度查询/更新”控件,进入“维度查询/更新”界面,如图所示。
单击【新建】按钮,配置数据库连接,单击【浏览】按钮,选择输出的目标表,即维度表dim_store;在“关键字”选项卡处添加关键字字段store_id,用于指定维度表字段和流字段的比较条件,如图所示:
在这里插入图片描述
在“字段”选项卡处添加查询/更新字段,用于指定维度表字段store_id和流字段store_id数据一致需要更新的字段,;在“代理关键字段”处的下拉框中选择store_key为代理关键字段,并指定“创建代理键”是使用自增字段;在“Version字段”处的下拉框中选择store_version_number;在“Stream日期字段”处的下拉框中选择last_update;在“开始日期字段”处的下拉框中选择store_valid_from;在“截止日期字段”处的下拉框中选择store_valid_through,如图所示。
在这里插入图片描述
(7)、运行load_dim_store转换
单击转换工作区顶部的运行按钮,运行创建的转换load_dim_store,实现加载商店数据至商店维度表dim_store中,如图所示。
在这里插入图片描述

三、数据库建立代码

创建表dim_customer

CREATE TABLE `dim_customer` (
  `customer_key` INT NOT NULL AUTO_INCREMENT,
  `customer_last_update` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00',
  `customer_id` INT DEFAULT NULL,
  `customer_first_name` VARCHAR(45) DEFAULT NULL,
  `customer_last_name` VARCHAR(45) DEFAULT NULL,
  `customer_email` VARCHAR(50) DEFAULT NULL,
  `customer_active` CHAR(3) DEFAULT NULL,
  `customer_created` DATE DEFAULT NULL,
  `customer_address` VARCHAR(64) DEFAULT NULL,
  `customer_district` VARCHAR(20) DEFAULT NULL,
  `customer_postal_code` VARCHAR(10) DEFAULT NULL,
  `customer_phone_number` VARCHAR(20) DEFAULT NULL,
  `customer_city` VARCHAR(50) DEFAULT NULL,
  `customer_country` VARCHAR(50) DEFAULT NULL,
  `customer_version_number` SMALLINT DEFAULT NULL,
  `customer_valid_from` DATE DEFAULT NULL,
  `customer_valid_through` DATE DEFAULT NULL,
  PRIMARY KEY (`customer_key`),
  KEY `customer_id` (`customer_id`) USING BTREE
) ENGINE=MYISAM AUTO_INCREMENT=4794 DEFAULT CHARSET=latin1;

创建表dim_store

CREATE TABLE `dim_store` (
  `store_key` INT NOT NULL AUTO_INCREMENT,
  `store_last_update` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00',
  `store_id` INT DEFAULT NULL,
  `store_address` VARCHAR(64) DEFAULT NULL,
  `store_district` VARCHAR(20) DEFAULT NULL,
  `store_postal_code` VARCHAR(10) DEFAULT NULL,
  `store_phone_number` VARCHAR(20) DEFAULT NULL,
  `store_city` VARCHAR(50) DEFAULT NULL,
  `store_country` VARCHAR(50) DEFAULT NULL,
  `store_manager_staff_id` INT DEFAULT NULL,
  `store_manager_first_name` VARCHAR(45) DEFAULT NULL,
  `store_manager_last_name` VARCHAR(45) DEFAULT NULL,
  `store_version_number` SMALLINT DEFAULT NULL,
  `store_valid_from` DATE DEFAULT NULL,
  `store_valid_through` DATE DEFAULT NULL,
  PRIMARY KEY (`store_key`),
  KEY `store_id` (`store_id`) USING BTREE
) ENGINE=MYISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

创建表country

CREATE TABLE `country` (
  `country_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `country` VARCHAR(50) NOT NULL,
  `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`country_id`)
) ENGINE=INNODB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8;

创建表city

CREATE TABLE `city` (
  `city_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `city` VARCHAR(50) NOT NULL,
  `country_id` SMALLINT(5) UNSIGNED NOT NULL,
  `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`city_id`),
  KEY `idx_fk_country_id` (`country_id`),
  CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=601 DEFAULT CHARSET=utf8;

创建表address

CREATE TABLE `address` (
  `address_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `address` VARCHAR(50) NOT NULL,
  `address2` VARCHAR(50) DEFAULT NULL,
  `district` VARCHAR(20) NOT NULL,
  `city_id` SMALLINT(5) UNSIGNED NOT NULL,
  `postal_code` VARCHAR(10) DEFAULT NULL,
  `phone` VARCHAR(20) NOT NULL,
  `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`address_id`),
  KEY `idx_fk_city_id` (`city_id`),
  CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8;

创建表store

CREATE TABLE `store` (
  `store_id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  `manager_staff_id` TINYINT(3) UNSIGNED NOT NULL,
  `address_id` SMALLINT(5) UNSIGNED NOT NULL,
  `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`store_id`),
  UNIQUE KEY `idx_unique_manager` (`manager_staff_id`),
  KEY `idx_fk_address_id` (`address_id`),
  CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON DELETE RESTRICT ON UPDATE CASCADE,
  CONSTRAINT `fk_store_staff` FOREIGN KEY (`manager_staff_id`) REFERENCES `staff` (`staff_id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

创建表customer

CREATE TABLE `customer` (
  `customer_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `store_id` TINYINT(3) UNSIGNED NOT NULL,
  `first_name` VARCHAR(45) NOT NULL,
  `last_name` VARCHAR(45) NOT NULL,
  `email` VARCHAR(50) DEFAULT NULL,
  `address_id` SMALLINT(5) UNSIGNED NOT NULL,
  `active` TINYINT(1) NOT NULL DEFAULT '1',
  `create_date` DATETIME NOT NULL,
  `last_update` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`customer_id`),
  KEY `idx_fk_store_id` (`store_id`),
  KEY `idx_fk_address_id` (`address_id`),
  KEY `idx_last_name` (`last_name`),
  CONSTRAINT `fk_customer_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON DELETE RESTRICT ON UPDATE CASCADE,
  CONSTRAINT `fk_customer_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=600 DEFAULT CHARSET=utf8;
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐