国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

這篇具有很好參考價值的文章主要介紹了第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????

目錄

一.學習目標

二.案例介紹

? ? ? ??2.1.案例背景介紹

? ? ? ? 2.2.數(shù)據(jù)倉庫的架構(gòu)模型

三.數(shù)據(jù)準備

? ? ? ??3.1.數(shù)據(jù)庫sakila的下載和安裝

? ?? ? ?3.2.數(shù)據(jù)庫sakila簡介

四.案例實現(xiàn)

? ? ? ?4.1加載日期數(shù)據(jù)至日期維度表

? ? ? ?4.2?加載時間數(shù)據(jù)至時間維度表

???????4.3?加載員工數(shù)據(jù)至員工維度表

? ? ? ?4.4加載用戶數(shù)據(jù)至用戶維度表

? ? ? ?4.5加載商店數(shù)據(jù)至商店維度表

???????4.6 加載演員數(shù)據(jù)至演員維度表

一.學習目標

????????了解數(shù)據(jù)庫sakila中的數(shù)據(jù)表

????????理解數(shù)據(jù)倉庫sakila_dw 的架構(gòu)設計

????????熟悉DVD租賃商店的業(yè)務流程

????????掌握構(gòu)建DVD租賃商店數(shù)據(jù)倉庫的具體實現(xiàn)

二.案例介紹

? ? ? ? 概要:sakila樣本數(shù)據(jù)庫是MySQL官方提供的一個模擬DVD租賃商店管理的數(shù)據(jù)庫。本章,我們將綜合運用前面幾章的知識,對數(shù)據(jù)庫sakila中的數(shù)據(jù)進行清洗操作,從而構(gòu)建一個DVD租賃商店數(shù)據(jù)倉庫系統(tǒng),即實現(xiàn)定期從源數(shù)據(jù)庫sakila中抽取增量數(shù)據(jù),轉(zhuǎn)換成符合DVD租賃業(yè)務的數(shù)據(jù),最后加載到目標數(shù)據(jù)倉庫中。

? ? ? ??2.1.案例背景介紹

????????????????在日益激烈的商業(yè)競爭中,在線DVD租賃商店的決策者都迫切地需要更加準確的戰(zhàn)略決策信息。每個在線DVD租賃商店的數(shù)據(jù)都存儲在數(shù)據(jù)庫中,因此該數(shù)據(jù)庫中擁有海量的數(shù)據(jù),并不缺乏足夠的信息,但是這些數(shù)據(jù)并不是戰(zhàn)略決策需要的信息。雖然這些海量數(shù)據(jù)對于在線DVD租賃商店的運作是非常有用的,但是對于商業(yè)的戰(zhàn)略決策和目標制定的作用是微乎其微的。

????????????????對于在線DVD租賃商店的決策者來說,他們需要從多個不同的商業(yè)角度觀察數(shù)據(jù),例如時間、電影、演員、用戶等角度觀察數(shù)據(jù),并進行相關的分析得出決策,但是數(shù)據(jù)庫中的數(shù)據(jù)不適合從多個角度進行分析,無法得出戰(zhàn)略決策。然而,數(shù)據(jù)倉庫支持復雜的分析操作,側(cè)重于決策支持,并且還提供直觀易懂的查詢結(jié)果,因此我們需要基于數(shù)據(jù)庫sakila創(chuàng)建一個DVD租賃商店數(shù)據(jù)倉庫,并將sakila數(shù)據(jù)庫中的數(shù)據(jù)加載到數(shù)據(jù)倉庫中,便于在線DVD租賃商店的決策者對數(shù)據(jù)進行分析得出商業(yè)決策。

? ? ? ? 2.2.數(shù)據(jù)倉庫的架構(gòu)模型

????????????????數(shù)據(jù)倉庫sakila_dw的架構(gòu)模型是一個星型模型,其中dim_film表、dim_customer表、dim_actor表、dim_store表、dim_staff表、dim_date表以及dim_time表均為維度表;fact_rental表為事實表。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

????????????????sakila_dw.sql(數(shù)據(jù)庫中表是空的,無記錄)

/*
SQLyog Community v13.1.6 (64 bit)
MySQL - 8.0.26 : Database - sakila_dw
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`sakila_dw` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

USE `sakila_dw`;

/*Table structure for table `dim_actor` */

DROP TABLE IF EXISTS `dim_actor`;

CREATE TABLE `dim_actor` (
  `actor_key` int NOT NULL AUTO_INCREMENT,
  `actor_last_update` datetime NOT NULL,
  `actor_last_name` varchar(45) NOT NULL,
  `actor_first_name` varchar(45) NOT NULL,
  `actor_id` int NOT NULL,
  PRIMARY KEY (`actor_key`)
) ENGINE=MyISAM AUTO_INCREMENT=601 DEFAULT CHARSET=latin1;

/*Table structure for table `dim_customer` */

DROP TABLE IF EXISTS `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;

/*Table structure for table `dim_date` */

DROP TABLE IF EXISTS `dim_date`;

CREATE TABLE `dim_date` (
  `date_key` int NOT NULL,
  `date_value` date NOT NULL,
  `date_short` char(12) NOT NULL,
  `date_medium` char(16) NOT NULL,
  `date_long` char(24) NOT NULL,
  `date_full` char(32) NOT NULL,
  `day_in_year` smallint NOT NULL,
  `day_in_month` tinyint NOT NULL,
  `is_first_day_in_month` char(10) NOT NULL,
  `is_last_day_in_month` char(10) NOT NULL,
  `day_abbreviation` char(3) NOT NULL,
  `day_name` char(12) NOT NULL,
  `week_in_year` tinyint NOT NULL,
  `week_in_month` tinyint NOT NULL,
  `is_first_day_in_week` char(10) NOT NULL,
  `is_last_day_in_week` char(10) NOT NULL,
  `month_number` tinyint NOT NULL,
  `month_abbreviation` char(3) NOT NULL,
  `month_name` char(12) NOT NULL,
  `year2` char(2) NOT NULL,
  `year4` smallint NOT NULL,
  `quarter_name` char(2) NOT NULL,
  `quarter_number` tinyint NOT NULL,
  `year_quarter` char(7) NOT NULL,
  `year_month_number` char(7) NOT NULL,
  `year_month_abbreviation` char(8) NOT NULL,
  PRIMARY KEY (`date_key`),
  UNIQUE KEY `date` (`date_value`) USING BTREE,
  UNIQUE KEY `date_value` (`date_value`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*Table structure for table `dim_film` */

DROP TABLE IF EXISTS `dim_film`;

CREATE TABLE `dim_film` (
  `film_key` int NOT NULL AUTO_INCREMENT,
  `film_last_update` datetime NOT NULL,
  `film_title` varchar(64) NOT NULL,
  `film_description` text NOT NULL,
  `film_release_year` smallint NOT NULL,
  `film_language` varchar(20) NOT NULL,
  `film_original_language` varchar(20) NOT NULL,
  `film_rental_duration` tinyint DEFAULT NULL,
  `film_rental_rate` decimal(4,2) DEFAULT NULL,
  `film_duration` int DEFAULT NULL,
  `film_replacement_cost` decimal(5,2) DEFAULT NULL,
  `film_rating_code` char(5) DEFAULT NULL,
  `film_rating_text` varchar(30) DEFAULT NULL,
  `film_has_trailers` char(4) DEFAULT NULL,
  `film_has_commentaries` char(4) DEFAULT NULL,
  `film_has_deleted_scenes` char(4) DEFAULT NULL,
  `film_has_behind_the_scenes` char(4) DEFAULT NULL,
  `film_in_category_action` char(4) DEFAULT NULL,
  `film_in_category_animation` char(4) DEFAULT NULL,
  `film_in_category_children` char(4) DEFAULT NULL,
  `film_in_category_classics` char(4) DEFAULT NULL,
  `film_in_category_comedy` char(4) DEFAULT NULL,
  `film_in_category_documentary` char(4) DEFAULT NULL,
  `film_in_category_drama` char(4) DEFAULT NULL,
  `film_in_category_family` char(4) DEFAULT NULL,
  `film_in_category_foreign` char(4) DEFAULT NULL,
  `film_in_category_games` char(4) DEFAULT NULL,
  `film_in_category_horror` char(4) DEFAULT NULL,
  `film_in_category_music` char(4) DEFAULT NULL,
  `film_in_category_new` char(4) DEFAULT NULL,
  `film_in_category_scifi` char(4) DEFAULT NULL,
  `film_in_category_sports` char(4) DEFAULT NULL,
  `film_in_category_travel` char(4) DEFAULT NULL,
  `film_id` int NOT NULL,
  PRIMARY KEY (`film_key`)
) ENGINE=MyISAM AUTO_INCREMENT=3001 DEFAULT CHARSET=latin1;

/*Table structure for table `dim_film_actor_bridge` */

DROP TABLE IF EXISTS `dim_film_actor_bridge`;

CREATE TABLE `dim_film_actor_bridge` (
  `film_key` int NOT NULL,
  `actor_key` int NOT NULL,
  `actor_weighting_factor` decimal(3,2) DEFAULT NULL,
  PRIMARY KEY (`film_key`,`actor_key`),
  KEY `dim_actor_dim_film_actor_bridge_fk` (`actor_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*Table structure for table `dim_staff` */

DROP TABLE IF EXISTS `dim_staff`;

CREATE TABLE `dim_staff` (
  `staff_key` int NOT NULL AUTO_INCREMENT,
  `staff_last_update` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
  `staff_first_name` varchar(45) DEFAULT NULL,
  `staff_last_name` varchar(45) DEFAULT NULL,
  `staff_id` int DEFAULT NULL,
  `staff_store_id` int DEFAULT NULL,
  `staff_version_number` smallint DEFAULT NULL,
  `staff_valid_from` date DEFAULT NULL,
  `staff_valid_through` date DEFAULT NULL,
  `staff_active` char(3) DEFAULT NULL,
  PRIMARY KEY (`staff_key`),
  KEY `staff_id` (`staff_id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;

/*Table structure for table `dim_store` */

DROP TABLE IF EXISTS `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;

/*Table structure for table `dim_time` */

DROP TABLE IF EXISTS `dim_time`;

CREATE TABLE `dim_time` (
  `time_key` int NOT NULL,
  `time_value` time NOT NULL,
  `hours24` tinyint NOT NULL,
  `hours12` tinyint DEFAULT NULL,
  `minutes` tinyint DEFAULT NULL,
  `seconds` tinyint DEFAULT NULL,
  `am_pm` char(3) DEFAULT NULL,
  PRIMARY KEY (`time_key`),
  UNIQUE KEY `time_value` (`time_value`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*Table structure for table `fact_rental` */

DROP TABLE IF EXISTS `fact_rental`;

CREATE TABLE `fact_rental` (
  `customer_key` int NOT NULL,
  `staff_key` int NOT NULL,
  `film_key` int NOT NULL,
  `store_key` int NOT NULL,
  `rental_date_key` int NOT NULL,
  `return_date_key` int NOT NULL,
  `rental_time_key` int NOT NULL,
  `count_returns` int NOT NULL,
  `count_rentals` int NOT NULL,
  `rental_duration` int DEFAULT NULL,
  `rental_last_update` datetime DEFAULT NULL,
  `rental_id` int DEFAULT NULL,
  KEY `dim_store_fact_rental_fk` (`store_key`),
  KEY `dim_staff_fact_rental_fk` (`staff_key`),
  KEY `dim_time_fact_rental_fk` (`rental_time_key`),
  KEY `dim_film_fact_rental_fk` (`film_key`),
  KEY `dim_date_fact_rental_fk` (`rental_date_key`),
  KEY `dim_customer_fact_rental_fk` (`customer_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

三.數(shù)據(jù)準備

? ? ? ??3.1.數(shù)據(jù)庫sakila的下載和安裝

????????????????我們可以從MySQL的官網(wǎng)下載數(shù)據(jù)庫sakila的建庫腳本,若是在Windows環(huán)境下安裝數(shù)據(jù)庫sakila,則下載名稱為sakila-db.zip的壓縮包文件;若是在Linux環(huán)境下安裝數(shù)據(jù)庫sakila,需要下載名稱為sakila-db.tar.gz的壓縮包文件。 本次下載的是名稱為sakila-db.zip的壓縮包文件,該壓縮包文件中包含三個文件,分別是文件sakila.mwb、文件sakila-data.sql和文件sakila-schema.sql。其中,文件sakila.mwb是一個MySQL Workbench數(shù)據(jù)模型,用于查看數(shù)據(jù)庫結(jié)構(gòu);文件sakila-data.sql是用于創(chuàng)建數(shù)據(jù)庫sakila的數(shù)據(jù);文件sakila-schema.sql是用于創(chuàng)建數(shù)據(jù)庫sakila的數(shù)據(jù)結(jié)構(gòu)。

????????????????數(shù)據(jù)庫sakila下載完成后,直接解壓壓縮包,然后使用MySQL圖形化管理軟件SQLyog(本文使用navicat)先運行腳本文件sakila-schema.sql創(chuàng)建數(shù)據(jù)庫sakila和數(shù)據(jù)表,再運行腳本文件sakila-data.sql向數(shù)據(jù)庫sakila中的數(shù)據(jù)表加載數(shù)據(jù),最后刷新數(shù)據(jù)庫并查看數(shù)據(jù)庫sakila中的數(shù)據(jù)表及數(shù)據(jù)表中的數(shù)據(jù),若數(shù)據(jù)表中均含有數(shù)據(jù)則說明安裝數(shù)據(jù)庫sakila成功,否則說明安裝不成功,需要重新解壓安裝。 需要注意的是,安裝數(shù)據(jù)庫sakila之前需要下載并安裝MySQL關系型數(shù)據(jù)庫,并且版本不可以低于5.0。

? ?? ? ?3.2.數(shù)據(jù)庫sakila簡介

????????????????數(shù)據(jù)庫sakila中一共含有十六張數(shù)據(jù)表,分別是actor(演員)表、address(地址)表、category(類別)表、city(城市)表、country(國家)表、customer(顧客)表、film(電影)表、film_actor(演員所屬電影)表、film_category(電影所屬的類別)表、film_text(電影描述)表、inventory(庫存)表、language(語言)表、payment(付款)表、rental(租賃)表、staff(工作人員)表以及store(商店)表。

? ? ? ? ? ? ? ? sakila建庫SQL語句:點擊獲取

四.案例實現(xiàn)

????????我們基于數(shù)據(jù)庫sakila構(gòu)建一個星型模型的DVD租賃商店數(shù)據(jù)倉庫,并命名為sakila_dw。數(shù)據(jù)倉庫sakila_dw中的事實表fact_rental是根據(jù)數(shù)據(jù)庫sakila中的數(shù)據(jù)表rental創(chuàng)建的;維度表是根據(jù)數(shù)據(jù)表sakila中數(shù)據(jù)表的分類創(chuàng)建的,即從人員、時間、地點以及事件四個角度進行創(chuàng)建數(shù)據(jù)倉庫sakila_dw的維度表,具體如下: 從人員角度角度創(chuàng)建維度表dim_customer和維度表dim_staff,分別表示租賃業(yè)務中的客戶和員工; 從時間角度創(chuàng)建維度表dim_date和維度表dim_time,用于記錄所有DVD的租賃時間和歸還時間; 從地點角度創(chuàng)建維度表dim_store,用于記錄DVD光盤是從哪個商店租賃的; 從事件角度創(chuàng)建維度表dim_actor和維度表dim_film,其中維度表dim_actor用于記錄演員的基本信息,維度表dim_film用于記錄電影的基本信息。由于電影是租賃和歸還的實際對象,因此維度表dim_film應與事實表fact_rental關聯(lián)。一部電影是由多位演員出演,所以會有橋接表dim_film_actor_bridge,該表將電影與演員相關聯(lián)。

? ? ? ?4.1加載日期數(shù)據(jù)至日期維度表

????????????????通過Kettle工具加載日期數(shù)據(jù)至dim_date日期維度表。

? ? ??(1)打開kettle創(chuàng)建轉(zhuǎn)換

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

???????(2)配置控件

? ? ? ? ? 生成記錄控件:雙擊進入生成記錄控件,在“限制”處添加生成的日期,默認為10,這里改為3650,即生成10年的日期(10*365);在“字段”框添加字段language(語言)、country_code(國家碼)、initial_date(初始化的日期),對生成的日期進行初始化,具體如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?增加?序列控件:雙擊“增加序列”控件,進入“增加序列”配置界面,并在“值的名稱”處將valuename改為DaySequence,即增加一列日期字段,后續(xù)用于改變“生成記錄”控件生成的日期,如圖所示。

? ? ? ? ? ? ? ? ? ? ? ? ?第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? JavaScript代碼:雙擊“JavaScript”控件,進入“JavaScript”配置界面,勾選“兼容模式?”處的復選框,使得JavaScript代碼控件的兼容性更強;在Java Script代碼框中編寫代碼(代碼見下方),如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? 代碼寫好后,點擊下方獲取變量將字段添加到下方,如上圖。

? ? ? ? 個人經(jīng)驗:在填寫好后字段后,建議查看一遍字段類型,將date字段數(shù)據(jù)類型改為Date,其余的都改為string。此建議只是在我運行時,數(shù)據(jù)庫中寫不進去記錄后所做的,僅供參考,具體看自己實踐情況。

? ? ? ? JavaScript代碼:

//Script here
//生成locale
var locale = new java.util.Locale(language.getString(),country_code.getString());
//生成Calendar
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;

? ? ? ? 表輸出控件: 雙擊進入表輸出控件,連接好數(shù)據(jù)庫,選擇目標表為dim_date,具體如下

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?????????目標表選好后,勾選指定數(shù)據(jù)庫字段,點擊下方數(shù)據(jù)庫字段,單擊【輸入字段映射】按鈕,彈出“映射匹配”對話框,依次選中“源字段”選項框的字段和“目標字段”選項框的字段,再單擊【Add】按鈕,將一對映射字段添加至“映射”選項框中,具體如下:

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?(3)保存運行

運行時間較長請耐心等待.........

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

數(shù)據(jù)庫中部分數(shù)據(jù),共3650條數(shù)據(jù)

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? 4.2?加載時間數(shù)據(jù)至時間維度表

? ? ? ?(1)操作介紹

????????????????通過Kettle工具加載時間數(shù)據(jù)至日期維度表dim_time。

? ? ? ? (2)打開kettle創(chuàng)建轉(zhuǎn)換

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?(3)配置控件

? ? ? ? ? ?生成記錄控件:雙擊“生成記錄”控件,進入“生成記錄”配置界面,在“限制”處添加生成的時間,這里添加的是生成24小時數(shù)據(jù),起始的時間為0;在“字段”框添加生成小時字段的相關信息,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? 增加序列控件:雙擊“增加序列”控件,進入“增加序列”配置界面,將“值的名稱”處將valuename改為hours24,即增加一列小時字段,由于時間是由時分秒構(gòu)成,因此我們需要生成時分秒字段的數(shù)據(jù),這里生成24小時數(shù)據(jù),后續(xù)步驟中會生成60分和60秒的數(shù)據(jù),如圖所示。

? ? ? ? ? ??

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? JavaScript代碼控件:雙擊“JavaScript代碼”控件,進入“JavaScript代碼”界面,勾選“兼容模式?”處的復選框,使得JavaScript代碼控件的兼容性更強;在Java Script代碼框中編寫代碼;單擊【獲取變量】按鈕,將代碼中定義的變量添加至字段框。JavaScript代碼控件的配置如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

//生成12小時格式
var hours12=hours24.getInteger()%12;
//生成AM,PM格式
var am_pm=hours24.getInteger()>12?"PM":"AM";

? ? ? ? ? ?生成記錄2控件:雙擊“生成記錄2”控件,進入“生成記錄”界面,在“限制”后的文本框添加60表示生成60條數(shù)據(jù)(60分鐘從0分開始至59分結(jié)束共60條數(shù)據(jù));在“字段”框添加生成字段的名稱、字段類型及默認值為0,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?增加序列2控件:雙擊“增加序列2”控件,進入“增加序列2”界面,將“值的名稱”處將valuename改為minutes,即增加一列分鐘字段,用于記錄分鐘數(shù),在起始值后的文本框內(nèi)將默認值1修改為0,表示從0開始生成60條數(shù)據(jù)(上一步“生成記錄2”控件限制了條數(shù)),即生成數(shù)據(jù)為0-59,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?生成記錄3控件:雙擊“生成記錄3”控件,進入“生成記錄”界面,在“限制”后的文本框添加60,表示生成60條數(shù)據(jù)(即60秒鐘從0秒開始至59秒結(jié)束共60條數(shù)據(jù));在“字段”框添加生成字段的名稱、字段類型及默認值為0,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?增加序列3控件:雙擊“增加序列3”控件,進入“增加序列3”界面,將“值的名稱”處將valuename改為minutes,即增加一列秒字段,用于記錄秒數(shù),在起始值后的文本框內(nèi)將默認值1修改為0,表示從0開始生成60條數(shù)據(jù)(上一步驟中“生成記錄3”控件限制了條數(shù)),即生成數(shù)據(jù)為0-59,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? 記錄關聯(lián)(笛卡爾輸出)控件:這一步不需要配置?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? JavaScript代碼2控件:雙擊“JavaScript代碼2”控件,進入“JavaScript代碼2”界面,勾選“兼容模式?”處的復選框,使得JavaScript代碼2控件的兼容性更強;在Java Script代碼框中編寫代碼;單擊【獲取變量】按鈕,將代碼中定義的變量添加至字段框。JavaScript代碼2控件的配置,如圖所示。? ? ? ? ? ?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?JavaScript2代碼:


//生成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();

? ? ? ? ? ?表輸出控件:雙擊進入表輸出控件,單擊目標表右側(cè)的【瀏覽】按鈕,選擇輸出的目標表,即維度表dim_time;勾選“指定數(shù)據(jù)庫字段”的復選框,用于將維度表dim_time的字段與JavaScript 控件流中的字段進行匹配,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?映射匹配:勾選指定數(shù)據(jù)庫字段,點擊數(shù)據(jù)庫字段,選擇輸入字段映射,進行映射匹配。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?(4)保存運行

? ? ? ? ? ? ? ? 總共有86400條記錄,執(zhí)行時間可能較長,一定要耐心等待?。?!

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?????????數(shù)據(jù)庫中部分記錄

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

????????4.3?加載員工數(shù)據(jù)至員工維度表

? ? ? ? ? (1)操作介紹

????????????????通過Kettle工具加載員工數(shù)據(jù)至員工維度表dim_staff。

? ? ? ? ? (2)打開kettle創(chuàng)建轉(zhuǎn)換

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?(3)配置控件

? ? ? ? ? ? ? ? 表輸入控件:雙擊“表輸入”控件,進入“表輸入”配置界面,單擊【新建】按鈕,配置數(shù)據(jù)? ? ? ? ? ?庫連接,配置完成后單擊【確認】按鈕。MySQL數(shù)據(jù)庫連接的配置,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

????????????????注意:這里的數(shù)據(jù)庫是sakila_dw數(shù)據(jù)庫??!

?????????在SQL框中編寫SQL語句,用于獲取字段staff_last_update中的最大值,將該值替換為”1970-01-01 00:00:00”并賦值給臨時字段max_dim_staff_last_update;單擊“預覽”按鈕,查看臨時字段max_dim_staff_last_update是否將默認值設置為“1970-01-01 00:00:00”,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?

? ? ? ? ? 表輸入2控件 :雙擊“表輸入2”控件,進入“表輸入”配置界面,單擊【新建】按鈕,配置數(shù)據(jù)庫連接,配置完成后單擊【確認】按鈕。MySQL數(shù)據(jù)庫連接的配置,如圖所示。? ? ? ? ??

?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?注意:這里的數(shù)據(jù)庫是sakila數(shù)據(jù)庫,可通過新建來連接,連接名稱記得不能和表輸入控件的一樣,否則會顯示連接已存在。

????????在SQL框中編寫SQL語句,用于獲取sakila數(shù)據(jù)庫中staff數(shù)據(jù)表中的最新數(shù)據(jù),如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?

? ? ? ? ? 字段選擇控件:雙擊“字段選擇”控件,進入“選擇/改名值”界面,在“元數(shù)據(jù)”選項卡的“需要改變元數(shù)據(jù)的字段”處添加字段active,由于數(shù)據(jù)倉庫sakila_dw中字段staff_active的數(shù)據(jù)類型為char類型,因此,我們需要將數(shù)據(jù)表staff中字段active的數(shù)據(jù)類型改為String類型,如圖所示。?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? 值映射控件:雙擊“值映射”控件,進入“值映射”界面,在“使用的字段名”處的下拉框選擇字段active;在“字段值”框中,添加源值和目標值,這里是將Y替換成Yes,將N替換成No,如圖所示。?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? 維度查詢/更新控件:?雙擊“維度查詢/更新”控件,進入“維度查詢/更新”界面,單擊目標表右側(cè)的【瀏覽】按鈕,選擇輸出的目標表,即維度表dim_staff;在“關鍵字”選項卡處添加關鍵字字段staff_id,用于指定維度表字段和值映射控件流中字段的比較條件,若維度表中的數(shù)據(jù)有更新,則通過字段staff_id進行更新操作;在“字段”選項卡處添加查詢/更新字段,用于更新目標維度表中的字段數(shù)據(jù);在“代理關鍵字段”處的下拉框中選擇staff_key為代理關鍵字段,并指定“創(chuàng)建代理鍵”是使用自增字段;在“Version字段”處的下拉框中選擇staff_version_number;在“Stream日期字段”處的下拉框中選擇last_update;在“開始日期字段”處的下拉框中選擇staff_valid_from;在“截止日期字段”處的下拉框中選擇staff_valid_through,如下圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?注意:這次的的數(shù)據(jù)庫連接是sakila_dw數(shù)據(jù)庫?。?!

? ? ? ? (4)保存運行

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?通過navicat工具,查看數(shù)據(jù)表dim_staff是否已成功插入員工數(shù)據(jù),查看結(jié)果如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? 4.4加載用戶數(shù)據(jù)至用戶維度表

? ? ? ? ? (1)操作介紹

? ? ? ? ?????????通過Kettle工具加載用戶數(shù)據(jù)至用戶維度表dim_customer。

? ? ? ? ? (2)打開kettle,建立轉(zhuǎn)換

? ? ? ? ? ? ? ? 轉(zhuǎn)換1:

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ????????轉(zhuǎn)換2:

? ? ? ? 注意:下面的轉(zhuǎn)換在映射(子轉(zhuǎn)換)控件中會用到,并且在4.5中也會用到,提前建立好,配置步驟我會在下面講解。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? (3)轉(zhuǎn)換2控件配置

? ? ? ? ? ? ? ? 映射輸入規(guī)范控件:雙擊“映射輸入規(guī)范”控件,進入“Mapping input specification”界面,

? ? ? ? ? ?并添加映射的字段“address_id”,該字段為傳遞的參數(shù)(由于轉(zhuǎn)換load_dim_customer中表

? ? ? ? ? 輸入2控件流獲取的字段address_id,用于查詢用戶的地址信息,而后續(xù)數(shù)據(jù)倉庫的維度表

? ? ? ? ? 數(shù)據(jù)也需要用戶的地址信息,因此這里將字段address_id作為傳遞的參數(shù)),添加完畢后單

? ? ? ? ? 擊【確定】按鈕,完成“映射輸入規(guī)范”控件的配置,如圖所示。

? ? ? ??

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?數(shù)據(jù)庫查詢控件:雙擊進入控件,單擊名右側(cè)的【瀏覽】按鈕,添加數(shù)據(jù)表address;

? ? ? ? ?在“查詢所需的關鍵字”框中,添加查詢所需的關鍵字字段address_id,由于該字段是唯一的,

? ? ? ? 因此可作為數(shù)據(jù)表address中數(shù)據(jù)和映射輸入規(guī)范控件流中數(shù)據(jù)的比較條件;在“查詢表返回的

? ? ? ? 值”框中,添加查詢表返回的值,如圖所示。? ? ? ? ? ? ? ? ??

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?數(shù)據(jù)庫查詢2控件:雙擊進入控件,單擊名右側(cè)的【瀏覽】按鈕,添加數(shù)據(jù)表address;

? ? ? ?在“查詢所需的關鍵字”框中,添加查詢所需的關鍵字字段address_id,由于該字段是唯一的,

? ? ? ?因此可作為數(shù)據(jù)表address中數(shù)據(jù)和映射輸入規(guī)范控件流中數(shù)據(jù)的比較條件;在“查詢表返回的

? ? ? 值”框中,添加查詢表返回的值,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?數(shù)據(jù)庫查詢3控件:雙擊進入控件,單擊表名處的【瀏覽】按鈕,添加數(shù)據(jù)表country;

? ? ? ? ?在“查詢所需的關鍵字”框中,添加查詢所需的關鍵字字段country_id,用于指定字段流與表字

? ? ? ? ?段的數(shù)據(jù)進行比較的比較條件;在“查詢表返回的值”框中,添加查詢表返回的值,如圖所

? ? ? ? ?示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 過濾記錄控件:雙擊“過濾記錄”控件,進入“過濾記錄”配置界面,在“條件”處設置過濾的

? ? ? ? 條件,對有第二個地址的用戶進行過濾操作;單擊左邊“<field>”框,彈出字段對話框,選擇要

? ? ? ? 過濾的字段address2,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?JavaScript代碼控件:雙擊“JavaScript代碼”控件,進入“JavaScript代碼”配置界面,

? ? ? ? ? 勾選“兼容模式?”處的復選框,使得JavaScript代碼控件的兼容性更強;在Java Script代

? ? ? ? ?碼框中編寫代碼,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?字段選擇控件:雙擊“字段選擇”控件,進入“選擇/改名值”界面,在“元數(shù)據(jù)”選項卡的“移

? ? ? ? 除”處添加要移除的字段,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?(4)轉(zhuǎn)換1控件配置

? ? ? ? ? ? ? ? 表輸入控件:雙擊進入控件,在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”,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?表輸入2控件:雙擊進入控件配置界面,在SQL框中編寫SQL語句,用于獲取數(shù)據(jù)庫

? ? ? ? ?sakila中數(shù)據(jù)表customer中的最新數(shù)據(jù),如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?映射(子轉(zhuǎn)換)控件:雙擊“映射”控件,進入“映射”界面,單擊“映射轉(zhuǎn)換”選項卡處的

? ? ?【瀏覽】按鈕,選擇添加轉(zhuǎn)換2(我演示選擇的文件實際就是轉(zhuǎn)換2,只不過我的名字不是轉(zhuǎn)換

? ? ? ?2),用于獲?取用戶的地址信息,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?字段選擇控件:雙擊步驟1中的“字段選擇”控件,進入“選擇/改名值”界面,在“元數(shù)據(jù)”選

? ? ? ? ?項卡的“需要改變元數(shù)據(jù)的字段”處添加字段active,由于數(shù)據(jù)表customer中字段active的類型

? ? ? ? ?為tinyint,因此需要將字段active的類型改為String,與維度表dim_customer中字段

? ? ? ? ?customer_active的類型相對應,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? ?值映射控件:雙擊步驟1中的“值映射”控件,進入“值映射”界面,在“使用的字段名”處的

? ? ? ? ? ?下拉框選擇字段active;在“字段值”框中,添加源值和目標值,由于數(shù)據(jù)表customer中字段? ? ? ? ? ? ?active的值為1和0,對應的是Y和N,這里將Y替換成Yes,將N替換成No,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

????????????????維度查詢/更新”控件?:雙擊進入控件,單擊目標表右側(cè)的【瀏覽】按鈕,選擇輸出的目

? ? ? ? ?標表,即維度表dim_customer;在“關鍵字”選項卡處添加關鍵字字段customer_id,用于

? ? ? ? 指定維度表字段和流字段的比較條件;在“字段”選項卡處添加查詢/更新字段;在“代理關鍵字

? ? ? ?段”處的下拉框中選擇customer_key為代理關鍵字段,并指定“創(chuàng)建代理鍵”是使用自增字

? ? ? ?段;在“Version字段”處的下拉框中選擇customer_version_number;在“Stream日期字段”

? ? ? 處的下拉框中選擇last_update;在“開始日期字段”處的下拉框中選擇

? ? customer_valid_from;在“截止日期字段”處的下拉框中選擇customer_valid_through,如圖

? ?所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? (5)保存運行

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

只展示部分數(shù)據(jù)

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫?

? ? ? ? 4.5加載商店數(shù)據(jù)至商店維度表

? ? ? ? ? (1)操作介紹

????????????????通過Kettle工具加載商店數(shù)據(jù)至商店維度表dim_store。

? ? ? ? ? (2)打開kettle,建立轉(zhuǎn)換

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?(3)配置控件

? ? ? ? ? ? ? ? 表輸入控件:雙擊進入表輸入控件,在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” ,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 表輸入2控件:雙擊進入表輸入2控件,在SQL框中編寫SQL語句,用于獲取sakila數(shù)據(jù)

? ? ? ? 庫中store數(shù)據(jù)表中的最新數(shù)據(jù),如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 映射(子轉(zhuǎn)換)控件:雙擊“映射”控件,進入“映射”界面,單擊“映射轉(zhuǎn)換”選項卡處的

? ? ? 【瀏覽】按鈕,選擇添加轉(zhuǎn)換2(4.5步驟中的轉(zhuǎn)換2,我起的名字和本文說的不一樣),用于

? ? ? ?獲取用戶的地址信息,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 數(shù)據(jù)庫查詢控件:雙擊進入控件配置界面,單擊表名右側(cè)的【瀏覽】按鈕,添加staff數(shù)

? ? ? ? 據(jù)表,用于查詢商店員工的信息;在“查詢所需的關鍵字”框中,添加查詢所需的關鍵字

? ? ? ?staff_id,用于指定表字段和流字段的比較條件;在“查詢表返回的值”框中,添加查詢表返回的

? ? ? ?值,即員工姓名,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 維度查詢/更新控件:單擊【瀏覽】按鈕,選擇輸出的目標表,即維度表dim_store;在

? ? ? ? “關鍵字”選項卡處添加關鍵字字段store_id,用于指定維度表字段和流字段的比較條件;在“字

? ? ? ? 段”選項卡處添加查詢/更新字段,用于指定維度表字段store_id和流字段store_id數(shù)據(jù)一致需要

? ? ? ?更新的字段,;在“代理關鍵字段”處的下拉框中選擇store_key為代理關鍵字段,并指定“創(chuàng)建

? ? ? 代理鍵”是使用自增字段;在“Version字段”處的下拉框中選擇store_version_number;在

? ? ?“Stream日期字段”處的下拉框中選擇last_update;在“開始日期字段”處的下拉框中選擇

? ? ?store_valid_from;在“截止日期字段”處的下拉框中選擇store_valid_through,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?(4)保存運行

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?數(shù)據(jù)庫中數(shù)據(jù):

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?

????????4.6 加載演員數(shù)據(jù)至演員維度表

? ? ? ? ? (1)操作介紹

????????????????通過Kettle工具加載演員數(shù)據(jù)至演員維度表dim_actor。

? ? ? ? ?(2)打開kettle,建立如下轉(zhuǎn)換

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ?(3)配置控件

? ? ? ? ? ? ? ? 表輸入控件:雙擊進入控件,在SQL框中編寫SQL語句,用于獲取字段

? ? ? ?actor_last_update中的最大值,將該值替換為”1970-01-01 00:00:00”并賦值給臨時字段

? ? ? max_dim_actor_last_update;單擊“預覽”按鈕,查看臨時字段max_dim_actor_last_update是

? ? ?否將默認值設置為“1970-01-01 00:00:00”,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ????????表輸入2控件:雙擊進入表輸入2控件,在SQL框中編寫SQL語句,用于獲取數(shù)據(jù)庫sakila

? ? ? ? 中數(shù)據(jù)表actor中的最新數(shù)據(jù),如圖所示。?

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ? ? ? 插入/更新控件:單擊目標表右側(cè)的【瀏覽】按鈕,彈出“數(shù)據(jù)庫瀏覽器”窗口,選擇目標

? ? ? ? 表,即維度表dim_actor,單擊【獲取字段】按鈕,用來指定查詢數(shù)據(jù)所需要的關鍵字,這里

? ? ? ?選?擇的是dim_actor數(shù)據(jù)表中的actor_id字段和輸入流里面的actor_id字段;單擊【獲取和更

? ? ? 新字段】按鈕,用來指定需要更新的字段,如圖所示。

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

? ? ? ? ? ?(4)保存運行

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?部分數(shù)據(jù):

第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫

?

本篇文章并不完善,后期我會逐漸完善,請見諒?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-486399.html

到了這里,關于第8章 綜合案例—構(gòu)建DVD租賃商店數(shù)據(jù)倉庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • python數(shù)據(jù)分析案例——天貓訂單綜合分析

    python數(shù)據(jù)分析案例——天貓訂單綜合分析

    前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 什么是數(shù)據(jù)分析 明確目的–獲得數(shù)據(jù)(爬蟲,現(xiàn)有,公開的數(shù)據(jù))–數(shù)據(jù)預處理——數(shù)據(jù)可視化——結(jié)論 準備 環(huán)境使用: 在開始寫我們的代碼之前,我們要準備好運行代碼的程序 Anaconda (python3.9) – 識別我們寫的代碼 開發(fā)工

    2024年02月03日
    瀏覽(34)
  • 第1關:數(shù)據(jù)清洗MapReduce綜合應用案例 — 招聘數(shù)據(jù)清洗

    根據(jù)提示,在右側(cè)編輯器補充代碼,對數(shù)據(jù)按照一定規(guī)則進行清洗。 數(shù)據(jù)說明如下: data.json ; 數(shù)據(jù)所在位置: /root/data/data.json ; id company_name eduLevel_name emplType jobName salary createDate endDate city_code companySize welfare responsibility place workingExp id編號 公司名稱 學歷要求 工作類型 工作

    2024年02月06日
    瀏覽(24)
  • 大數(shù)據(jù)課程綜合實驗案例:網(wǎng)站用戶行為分析

    大數(shù)據(jù)課程綜合實驗案例:網(wǎng)站用戶行為分析

    大數(shù)據(jù)課程實驗案例:網(wǎng)站用戶行為分析,由廈門大學數(shù)據(jù)庫實驗室團隊開發(fā),旨在滿足全國高校大數(shù)據(jù)教學對實驗案例的迫切需求。本案例涉及數(shù)據(jù)預處理、存儲、查詢和可視化分析等數(shù)據(jù)處理全流程所涉及的各種典型操作,涵蓋Linux、MySQL、Hadoop、HBase、Hive、Sqoop、R、Ec

    2024年02月06日
    瀏覽(112)
  • 第1關:MapReduce綜合應用案例 — 電信數(shù)據(jù)清洗

    根據(jù)提示,在右側(cè)編輯器補充代碼,對數(shù)據(jù)按照一定規(guī)則進行清洗。 數(shù)據(jù)說明如下: a.txt 數(shù)據(jù)切分方式: , 數(shù)據(jù)所在位置: /user/test/input/a.txt 15733218050,15778423030,1542457633,1542457678,450000,530000 15733218050 15778423030 1542457633 1542457678 450000 530000 呼叫者手機號 接受者手機號 開始時間戳(

    2024年02月03日
    瀏覽(22)
  • 第11章綜合案例2影評大數(shù)據(jù)分析

    第11章綜合案例2影評大數(shù)據(jù)分析

    實驗目的及要求 (1)現(xiàn)有電影、影評和用戶信息3個數(shù)據(jù)文件,將對其進行大數(shù)據(jù)分析。 實驗系統(tǒng)環(huán)境及版本 Linux Ubuntu 20.04 JDK1.8 Hadoop3.1.0 MySQL8.0.28 Hive3.1.2 實驗任務 評分次數(shù)最多的10部電影; 性別當中評分最高的10部電影; 一部電影各年齡段的平均影評; 評分最高的10部電

    2024年02月07日
    瀏覽(18)
  • 圖解大數(shù)據(jù) | 綜合案例-使用Spark分析挖掘音樂專輯數(shù)據(jù)

    圖解大數(shù)據(jù) | 綜合案例-使用Spark分析挖掘音樂專輯數(shù)據(jù)

    作者:韓信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-detail/178 聲明:版權(quán)所有,轉(zhuǎn)載請聯(lián)系平臺與作者并注明出處 收藏ShowMeAI查看更多精彩內(nèi)容 文娛影音是目前大數(shù)據(jù)與AI應用最廣泛的場景之一,本案例以音樂專輯發(fā)行數(shù)據(jù)為背景

    2024年02月09日
    瀏覽(26)
  • 頭歌大數(shù)據(jù)——MapReduce綜合應用案例 — 電信數(shù)據(jù)清洗 答案 無解析

    頭歌大數(shù)據(jù)——MapReduce綜合應用案例 — 電信數(shù)據(jù)清洗 答案 無解析

    第1關:數(shù)據(jù)清洗 編程要求 根據(jù)提示,在右側(cè)編輯器補充代碼,對數(shù)據(jù)按照一定規(guī)則進行清洗。 Tips:本關需要補充三個文件的代碼~如下圖所示,點擊小三角切換文件~ ? 記得啟動HDFS~~ 代碼如下:?

    2024年02月04日
    瀏覽(18)
  • 大數(shù)據(jù)框架之Hive: 第7章 綜合案例練習(初級)

    (1)創(chuàng)建/opt/module/data目錄 (2)將如下4個文件放到/opt/module/data目錄下 (3)數(shù)據(jù)樣式說明 (1)插入數(shù)據(jù) (2)驗證插入數(shù)據(jù)情況 2.1.1 查詢姓名中帶“冰”的學生名單 code 結(jié)果 2.1.2 查詢姓“王”老師的個數(shù) code 結(jié)果 2.1.3 檢索課程編號為“04”且分數(shù)小于60的學生的課程信息,

    2024年02月12日
    瀏覽(18)
  • Python綜合案例-小費數(shù)據(jù)集的數(shù)據(jù)分析(詳細思路+源碼解析)

    Python綜合案例-小費數(shù)據(jù)集的數(shù)據(jù)分析(詳細思路+源碼解析)

    目錄 1. 請導入相應模塊并獲取數(shù)據(jù)。導入待處理數(shù)據(jù)tips.xls,并顯示前5行。 2、分析數(shù)據(jù) ?3.增加一列“人均消費” 4查詢抽煙男性中人均消費大于5的數(shù)據(jù) ?5.分析小費金額和消費總額的關系,小費金額與消費總額是否存在正相關關系。畫圖觀察。 6分析男女顧客哪個更慷慨,

    2024年02月02日
    瀏覽(27)
  • 嘉明的云計算與大數(shù)據(jù)學習之大數(shù)據(jù)綜合實驗案例

    嘉明的云計算與大數(shù)據(jù)學習之大數(shù)據(jù)綜合實驗案例

    (1)Linux:Ubuntu 16.04。 虛擬機鏡像下載鏈接:https://pan.baidu.com/s/1i_B-2rAfPM53jf7Besi0tw 提取碼:WZJM (2)MySQL:5.7.16。 (3)Hadoop:2.7.1。 (4)HBase:1.1.5。 (5)Hive:1.2.1。 (6)Sqoop:1.4.6。 (7)R:4.1.2。 (8)Eclipse:3.8。 本案例共包含4個實驗步驟。 (1)本地數(shù)據(jù)集上傳到數(shù)據(jù)倉庫Hive。 (2)Hive數(shù)據(jù)分析。 (3)Hive,M

    2024年02月04日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包