mysql构建多维cube_mysql多维数据仓库指南--第一篇第1章(续)

第3节任务

有四个任务需要在本章完成:

1.建立一个数据库用户。

2.建立两个关系数据库,一个作为数据仓库,另外一个作为源数据库。

3.为数据仓库建立数据库表。

4.产生代理键。

每个任务将在独立的小节中说明。

建立一个数据库用户id

第一步产生一个数据库用户,你可以用该帐户进行操作数据仓库和数据源。

在你开始前,确信你已经将本书随附的脚本文件放置在mysql的安装目录下面。例如,我的安装目录是C:\mysql,所以我将我的脚本文件放在C:\mysql\scripts目录中。

我们开始将用root用户登陆mysql,请输入下面的命令:C:\>mysql -uroot -p

你将被提示输入密码:

Enter password: ********

输入密码后,将看到控制台的欢迎信息:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 6 to server version: 5.0.21-community-ntType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql>

敲入密码后的这些信息是当一个root用户登陆mysql时典型的回应信息。列表1-1所示的脚本create_user_id.sql产生一个用户id dwid其密码是pw。

列表1-1:创建dwid用户id

/*****************************************************************/*/

/* create_user_id.sql*/

/**/

/*****************************************************************/

GRANT ALL ON *.* TO dwid@localhost IDENTIFIED BY 'pw';

/* end of script

用下面的命令方式运行该脚本:mysql> \. c:\mysql\scripts\create_user_id.sql

回车后,你将看到回应的信息:Query OK, 0 rows affected (0.03 sec)

用show grants命令,你可以确认用户id:dwid是否已经被成功创建,你应该在命令中包含你的mysql服务器名称:mysql> show grants for dwid@localhost;

假如存在用户dwid,你可以看到如下信息:Grants for dwid@localhostGRANT ALL PRIVILEGES ON *.* TO 'dwid'@'localhost' IDENTIFIED BYPASSWORD '*D821809F681A40A6E379B50D0463EFAE20BDD122'1 row in set (0.00 sec)

注意密码部分在你的显示屏上显示的方式将不同于上面的描述。

现在你需要退出mysq然后用dwid用户登陆,退出mysql用exit命令:mysql> exit

为了以dwid身份登陆mysql,可以用下面的命令:c:\>mysql -udwid -p

然后输入dwid的密码,记住,密码是pw。

建立数据库

有两个数据库需要建立,源数据(source)和数据仓库(dw)。Source数据库存储你的数据,也就是这些数据将成为你的数据仓库的源数据。Dw数据库是为了作为数据仓库建立的。

可以用列表1-2中的create_databases.sql脚本进行创建数据库。

列表1.2:建立dw和source数据库

/*****************************************************************/

/**/

/* create_databases.sql*/

/**/

/*****************************************************************/

CREATE DATABASE dw

;

CREATE DATABASE source

;

运行create_databases.sql脚本的命令如下:mysql> \. c:\mysql\scripts\create_databases.sql

在你的控制台界面上,你将看到:Query OK, 1 row affected (0.00 sec)Query OK, 1 row affected (0.00 sec)

你可以用show databases命令来确认上面的命令是否成功运行。为了确认dw数据库被创建用下面命令:mysql> show databases like 'dw';

回应信息将如下面所示:+---------------+| Database (dw) |+---------------+| dw|+---------------+1 row in set (0.00 sec)

为了确认source数据库被成功创建用下面命令:mysql> show databases like 'source';

回应信息将如下面所示:+-------------------+| Database (source) |+-------------------+| source|+-------------------+1 row in set (0.00 sec)创建数据仓库表第二步是在dw数据库中创建数据仓库表。你可以用列表1-3所示的create_dw_tables.sql脚本来创建图1-1中的sales_order_fact表和四个维表。

列表1-3:创建数据仓库表

/*****************************************************************/

/**/

/* create_dw_tables.sql*/

/**/

/*****************************************************************/

/* default to dw database*/

USE dw;

/* creating customer_dim table*/

CREATE TABLE customer_dim

( customer_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, customer_number INT

, customer_name CHAR (50)

, customer_street_address CHAR (50)

, customer_zip_code INT (5)

, customer_city CHAR (30)

, customer_state CHAR (2)

, effective_date DATE

, expiry_date DATE )

;

/* creating product_dim table*/

CREATE TABLE product_dim

( product_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, product_code INT

, product_name CHAR (30)

, product_category CHAR (30)

, effective_date DATE

, expiry_date DATE )

;

/* creating order_dim table*/

CREATE TABLE order_dim

( order_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, order_number INT

, effective_date DATE

, expiry_date DATE )

;

/* creating date_dim table*/

CREATE TABLE date_dim

( date_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, date DATE

, month_name CHAR (9)

, month INT (1)

, quarter INT (1)

, year INT (4)

, effective_date DATE

, expiry_date DATE )

;

/* creating sales_order_fact_table*/

CREATE TABLE sales_order_fact

( order_sk INT

, customer_sk INT

, product_sk INT

, order_date_sk INT

, order_amount DECIMAL (10, 2) )

;现在运行create_dw_tables.sql脚本:mysql> \. c:\mysql\scripts\create_dw_tables.sql你的控制台将显示如下类似的信息:Database changedQuery OK, 0 rows affected (0.13 sec)Query OK, 0 rows affected (0.12 sec)Query OK, 0 rows affected (0.12 sec)Query OK, 0 rows affected (0.10 sec)Query OK, 0 rows affected (0.11 sec)你可以用show createtable命令确认某个表是否被创建成功,例如,为了验证customer_dim表是否创建成功,用这个命令:mysql> show create table customer_dim \G在你的控制台界面上,将可以看到:*************************** 1. row ***************************Table: customer_dimCreate Table: CREATE TABLE 'customer_dim' ('customer_sk' int(11) NOT NULL auto_increment,'customer_number' int(11) default NULL,'customer_name' char (50) default NULL,'customer_street_address' char (50) default NULL,'customer_zip_code' int (5) default NULL,'customer_city' char (30) default NULL,'customer_state' char (2) default NULL,'effective_date' date default NULL,'expiry_date' date default NULL,PRIMARY KEY ('customer_sk')) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)用相同的方式,可以确认其他表是否成功创建。产生代理键本节的最后一个任务是用列表1-4所示的customer_sk.sql脚本创建代理键,这个脚本将向customer_dim表插入3条记录。

列表1-4:产生 客户代理键值

/******************************************************************/

/**/

/* customer_sk.sql*/

/**/

/******************************************************************/

/* default to dw*/

USE dw;

INSERT INTO customer_dim

( customer_sk

, customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state

, effective_date

, expiry_date )

VALUES

(NULL, 1, 'Big Customers', '7500 Louise Dr.', '17050',

'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 2, 'Small Stores', '2500 Woodland St.', '17055',

'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 3, 'Medium Retailers', '1111 Ritter Rd.', '17055'

'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

;

/* end of script*/运行customer_sk.sql脚本之前,你必须将你的mysql时间设置为:2007-02-01,这是因为customer_sk.sql脚本中的CURRENT_DATE函数用操作系统的时间作为载入effective_date字段的值,而我就是在这个时间运行customer_sk.sql脚本的。你可以通过将mysql运行的机器的系统的时间修改为特定的值来修改mysql时间。注意要牢记,这里你改变mysql的时间只是为了能比较平滑结合这个学习教程,实际的生产环境中,你不能在运行脚本的前后改变你的数据库或者系统的时间。事实上,你应该在数据库仓库环境中安排部署你的各个脚本定期的运行。如何定期安排将在第8节“定期载入”中讨论。注意你的mysql监控端将在系统时间被修改后断开和mysql服务端的连接,为了确保你运行脚本不会有什么问题,在调整时间后,试着运行一下诸如“use dw”的简单的命令,你将得到一个错误的信息提示,但是你的监控端将重新连接上mysql。你可以再次运行“use dw”命令来确定已经连接上myslq服务器,这次,你不会再得到任何错误提示了。现在,你已经将mysql的时间调整到2007-02-01,可以用如下的命令运行列表1-4中所示的脚本,mysql> \. c:\mysql\scripts\customer_sk.sql你将在你的控制台上看到如下信息:Database changedQuery OK, 3 rows affected (0.06 sec)Records: 3Duplicates: 0Warnings: 0查询该表,你可以看到这个脚本已经准确的插入代理键值了。

mysql> select * from customer_dim \G

*************************** 1. row ***************************

customer_sk: 1

customer_number: 1

customer_name: Big Customers

customer_street_address: 7500 Louise Dr.

customer_zip_code: 17050

customer_city: Mechanicsburg

customer_state: PA

effective_date: 2007-02-01

expiry_date: 9999-12-31

*************************** 2. row ***************************

customer_sk: 2

customer_number: 2

customer_name: Small Stores

customer_street_address: 2500 Woodland St.

customer_zip_code: 17055

customer_city: Pittsburgh

customer_state: PA

effective_date: 2007-02-01

expiry_date: 9999-12-31

*************************** 3. row ***************************

customer_sk: 3

customer_number: 3

customer_name: Medium Retailers

customer_street_address: 1111 Ritter Rd.

customer_zip_code: 17055

customer_city: Pittsburgh

customer_state: PA

effective_date: 2007-02-01

expiry_date: 9999-12-31

3 rows in set (0.00 sec)

mysql>

现在运行列表1-5中的脚本more_customer_sk.sq来增加更多的行。

列表1-5:插入更多客户资料

/*****************************************************************/

/**/

/* more_customer_sk.sql*/

/**/

/*****************************************************************/

USE dw;

INSERT INTO customer_dim (

customer_sk

, customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state

, effective_date

, expiry_date

)

VALUES

(NULL, 4, 'Good Companies', '9500 Scott St.', '17050',

'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 5, 'Wonderful Shops', '3333 Rossmoyne Rd.', '17050',

'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 6, 'Loyal Clients', '7070 Ritter Rd.', '17055',

'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

;下面说明如何运行more_customer_sk.sql脚本mysql> \. c:\mysql\scripts\more_customer_sk.sql你将看到:Database changedQuery OK, 3 rows affected (0.06 sec)Records: 3Duplicates: 0Warnings: 0如果你查询customer_dim表,将发现有6条记录在该表中:mysql> select * from customer_dim \G*************************** 1. row ***************************customer_sk: 1customer_number: 1customer_name: Big Customerscustomer_street_address: 7500 Louise Dr.customer_zip_code: 17050customer_city: Mechanicsburgcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-31*************************** 2. row ***************************customer_sk: 2customer_number: 2customer_name: Small Storescustomer_street_address: 2500 Woodland St.customer_zip_code: 17055customer_city: Pittsburghcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-31*************************** 3 row ***************************customer_sk: 3customer_number: 3customer_name: Medium Retailerscustomer_street_address: 1111 Ritter Rd.customer_zip_code: 17055customer_city: Pittsburghcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-31*************************** 4. row ***************************customer_sk: 4customer_number: 4customer_name: Good Companiescustomer_street_address: 9500 Scott St.customer_zip_code: 17050customer_city: Mechanicsburgcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-31*************************** 5. row ***************************customer_sk: 5customer_number: 5customer_name: Wonderful Shopscustomer_street_address: 3333 Rossmoyne Rd.customer_zip_code: 17050customer_city: Mechanicsburgcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-31*************************** 6. row ***************************customer_sk: 6customer_number: 6customer_name: Loyal Clientscustomer_street_address: 7070 Ritter Rd.customer_zip_code: 17055customer_city: Pittsburghcustomer_state: PAeffective_date: 2007-02-01expiry_date: 9999-12-316 rows in set (0.01 sec)不要删除这些客户记录,在下个章节中,你将用到它们。第4节 小结这一个节,你学习了星型模式和代理键。你还建立两个数据库以及操作这两个数据库的mysql用户。下面的章节,你将使用和扩展这些数据库。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值