免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2779 | 回复: 0

详解SQL Server中创建数据仓库已分区表 [复制链接]

论坛徽章:
0
发表于 2011-03-18 18:20 |显示全部楼层
详解SQL Server中创建数据仓库已分区表




在本练习中,您将创建一个分区数据仓库事实数据表。非常大的表经常需要跨几个磁盘卷存储数据。SQL Server 表无法放置在特定文件中。但是,文件组可以放置在文件中,而表可以分配给文件组。这样您就可以控制 SQL Server 中非常大的表中的数据的存储。而且,如果表跨几个文件组,定义哪些数据放置在哪个文件组中会非常有用。分区函数通过基于特定列中的值沿水平方向拆分表提供了此功能。

  注意: 您可以复制此练习中所用的脚本,这些脚本位于 C:\SQLHOLS\Partitioning\Solution\Partition Processing 文件夹中的 Partition Processing.ssmssln 解决方案中。

  1.新建 SQL Server 脚本项目

  (1)从开始->所有程序菜单中的 Microsoft SQL Server 2008 程序组中启动SQL Server Management Studio。

  (2)在连接到服务器对话框中,验证下列设置无误后单击连接:

  • 服务器类型:数据库引擎

  • 服务器名称:(local)

  • 身份验证:Windows 身份验证

  (3)在文件菜单上,指向新建,然后单击项目。

  (4)确保选中 SQL Server 脚本,然后输入下列设置:

  • 名称:Partition Processing

  • 位置:C:\SQLHOLs\Partitioning\Starter

  • 解决方案名称:Partition Processing

  (5)确保选中创建解决方案的目录,然后单击确定。

  (6)在解决方案资源管理器中,右键单击连接,然后单击新建连接。

  (7)在连接到服务器对话框中,验证下列设置无误后单击确定:

  • 服务器名称:(local)

  • 身份验证:Windows 身份验证

  2.创建文件组和文件

  (1)在解决方案资源管理器中,右键单击在前面步骤中添加的连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 Files and Filegroups.sql,然后按 Enter。

  (4)键入下面的代码(每个 FILENAME 参数都应单占一行)。
  1. USE [master]

  2.   ALTER DATABASE [AdventureWorksDW] ADD FILEGROUP [fg2001]

  3.   GO

  4.   ALTER DATABASE [AdventureWorksDW] ADD FILEGROUP [fg2002]

  5.   GO

  6.   ALTER DATABASE [AdventureWorksDW] ADD FILEGROUP [fg2003]

  7.   GO

  8.   ALTER DATABASE [AdventureWorksDW] ADD FILEGROUP [fg2004]

  9.   GO

  10.   ALTER DATABASE [AdventureWorksDW] ADD FILE

  11.   (NAME = N'AdventureWorksDW_Data2001',

  12.   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW_Data2001.ndf',

  13.   SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [fg2001]

  14.   GO

  15.   ALTER DATABASE [AdventureWorksDW] ADD FILE

  16.   (NAME = N'AdventureWorksDW_Data2002',

  17.   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW_Data2002.ndf',

  18.   SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [fg2002]

  19.   GO

  20.   ALTER DATABASE [AdventureWorksDW] ADD FILE

  21.   (NAME = N'AdventureWorksDW_Data2003',

  22.   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW_Data2003.ndf',

  23.   SIZE = 2048KB , FILEGROWTH = 1024KB) TO FILEGROUP [fg2003]

  24.   GO

  25.   ALTER DATABASE [AdventureWorksDW] ADD FILE

  26.   (NAME = N'AdventureWorksDW_Data2004',

  27.   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW_Data2004.ndf',

  28.   SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [fg2004]

  29.   GO
复制代码
(5)单击执行。
  3.创建分区函数

  (1)在解决方案资源管理器中,右键单击该连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 Create Partition Function.sql,然后按 Enter。

  (4)键入下面的代码。
  1. USE AdventureWorksDW

  2.   CREATE PARTITION FUNCTION pf_OrderDateKey(int)

  3.   AS RANGE RIGHT

  4.   FOR VALUES(185,550)

  5.   GO
复制代码
(5)单击执行。

  注意:分区函数提供了两个文件组之间的边界。在本例中,值是与 1 月 1 日对应的键。

  4.创建分区方案

  (1)在解决方案资源管理器中,右键单击该连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 Create Partition Scheme.sql,然后按 Enter。

  (4)键入下面的代码。单击执行。
  1. USE AdventureWorksDW

  2.   CREATE PARTITION SCHEME ps_OrderDateKey

  3.   AS PARTITION pf_OrderDateKey

  4.   TO (fg2001,fg2002,fg2003,fg2004)

  5.   GO
复制代码
注意:虽然分区函数中仅列出了两个边界,但却有四个文件组在分区函数中列出。第四个文件组是作为供将来的文件组拆分使用的下一个文件组提供的。

  5.创建已分区表

  (1)在解决方案资源管理器中,右键单击该连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 Create Table.sql,然后按 Enter。

  (4)键入下面的代码。
  1. USE AdventureWorksDW

  2.   CREATE TABLE [dbo].[FactInternetSalesPartitioned]

  3.   (

  4.   [InternetSalesID] [int] IDENTITY(1,1) NOT NULL,

  5.   [ProductKey] [int] NOT NULL,

  6.   [OrderDateKey] [int] NOT NULL,

  7.   [DueDateKey] [int] NOT NULL,

  8.   [ShipDateKey] [int] NOT NULL,

  9.   [CustomerKey] [int] NOT NULL,

  10.   [PromotionKey] [int] NOT NULL,

  11.   [CurrencyKey] [int] NOT NULL,

  12.   [SalesTerritoryKey] [int] NOT NULL,

  13.   [SalesOrderNumber] [nvarchar](20) NOT NULL,

  14.   [OrderQuantity] [smallint] NULL,

  15.   [UnitPrice] [money] NULL,

  16.   CONSTRAINT [PK_ FactInternetSalesPartitioned] PRIMARY KEY CLUSTERED

  17.   (

  18.   [InternetSalesID],

  19.   [ProductKey],

  20.   [OrderDateKey],

  21.   [DueDateKey],

  22.   [ShipDateKey],

  23.   [CustomerKey],

  24.   [PromotionKey],

  25.   [CurrencyKey],

  26.   [SalesTerritoryKey]

  27.   )

  28.   )

  29.   ON ps_OrderDateKey(OrderDateKey)

  30.   GO
复制代码
(5)单击执行。
  6.将数据插入已分区表中

  (1)在解决方案资源管理器中,右键单击该连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 Load Data.sql,然后按 Enter。

  (4)键入下面的代码。
  1.  USE AdventureWorksDW

  2.   INSERT INTO [dbo].[FactInternetSalesPartitioned]

  3.   (

  4.   [ProductKey],

  5.   [OrderDateKey],

  6.   [DueDateKey],

  7.   [ShipDateKey],

  8.   [CustomerKey],

  9.   [PromotionKey],

  10.   [CurrencyKey],

  11.   [SalesTerritoryKey],

  12.   [SalesOrderNumber],

  13.   [OrderQuantity],

  14.   [UnitPrice]

  15.   )

  16.   SELECT

  17.   [ProductKey],

  18.   [OrderDateKey],

  19.   [DueDateKey],

  20.   [ShipDateKey],

  21.   [CustomerKey],

  22.   [PromotionKey],

  23.   [CurrencyKey],

  24.   [SalesTerritoryKey],

  25.   [SalesOrderNumber],

  26.   [OrderQuantity],

  27.   [UnitPrice]

  28.   FROM [dbo].[FactInternetSales]

  29.   GO
复制代码
(5)单击执行。

  7.查看分区数据

  (1)在解决方案资源管理器中,右键单击该连接,然后单击新建查询。

  (2)右键单击 SQLQuery1.sql,然后单击重命名。

  (3)键入 View Partitioned Data.sql,然后按 Enter。

  (4)键入下面的代码。
  1.  USE AdventureWorksDW

  2.   SELECTProductKey,

  3.   OrderDateKey,

  4.   $PARTITION.pf_OrderDateKey (OrderDateKey) AS PartitionNo

  5.   FROM FactInternetSalesPartitioned

  6.   GO

  7.   SELECT $PARTITION.pf_OrderDateKey (OrderDateKey) AS PartitionNo,

  8.   COUNT(*) AS Rows FROM FactInternetSalesPartitioned

  9.   GROUP BY $PARTITION.pf_OrderDateKey (OrderDateKey)

  10.   ORDER BY PartitionNo

  11.   GO
复制代码
(5)单击执行。

  (6)待查询完成后,查看结果。

  注意:第一个结果集显示表中每行的产品密钥和订单日期密钥以及存储各行的相应分区。

  第二个结果集显示各分区中的行数。

  (7)保持 SQL Server Management Studio 打开,下一个练习还要使用此程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP