设为首页 收藏本站
查看: 753|回复: 0

[经验分享] 详解SQL Server中创建数据仓库已分区表

[复制链接]

尚未签到

发表于 2016-11-2 07:01:44 | 显示全部楼层 |阅读模式
  在本练习中,您将创建一个分区数据仓库事实数据表。非常大的表经常需要跨几个磁盘卷存储数据。ServerSecurity/Database/'>SQLServer表无法放置在特定文件中。但是,文件组可以放置在文件中,而表可以分配给文件组。这样您就可以控制ServerSecurity/Database/'>SQLServer中非常大的表中的数据的存储。而且,如果表跨几个文件组,定义哪些数据放置在哪个文件组中会非常有用。分区函数通过基于特定列中的值沿水平方向拆分表提供了此功能。

注意: 您可以复制此练习中所用的脚本,这些脚本位于 C:ServerSecurity/Database/'>SQLHOLSPartitioningSolutionPartition Processing 文件夹中的 PartitionProcessing.ssmssln 解决方案中。

1.新建ServerSecurity/Database/'>SQLServer脚本项目

(1)从开始->所有程序菜单中的 MicrosoftServerSecurity/Database/'>SQLServer2008程序组中启动ServerSecurity/Database/'>SQLServerManagementStudio。

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

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

· 服务器名称:(local)

· 身份验证:Windows 身份验证

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

(4)确保选中ServerSecurity/Database/'>SQLServer脚本,然后输入下列设置:

· 名称:Partition Processing

· 位置:C:ServerSecurity/Database/'>SQLHOLsPartitioningStarter

· 解决方案名称:Partition Processing

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

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

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

· 服务器名称:(local)

· 身份验证:Windows 身份验证

2.创建文件组和文件

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码(每个 FILENAME 参数都应单占一行)。

USE[master]  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2001]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2002]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2003]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2004]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME=N'AdventureWorksDW_Data2001',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2001.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2001]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2002',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2002.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2002]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2003',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2003.ndf',

SIZE =2048KB , FILEGROWTH =1024KB) TOFILEGROUP [fg2003]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2004',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2004.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2004]  GO

(5)单击执行。

3.创建分区函数

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

CREATEPARTITION FUNCTIONpf_OrderDateKey(int)

ASRANGE RIGHT  FORVALUES(185,550)

GO

(5)单击执行。

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

4.创建分区方案

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。单击执行。

USEAdventureWorksDW

CREATEPARTITION SCHEME ps_OrderDateKey

ASPARTITION pf_OrderDateKey

TO(fg2001,fg2002,fg2003,fg2004)

GO

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

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

CREATETABLE[dbo].[FactInternetSalesPartitioned]  (

[InternetSalesID][int]IDENTITY(1,1) NOTNULL,

[ProductKey][int]NOTNULL,

[OrderDateKey][int]NOTNULL,

[DueDateKey][int]NOTNULL,

[ShipDateKey][int]NOTNULL,

[CustomerKey][int]NOTNULL,

[PromotionKey][int]NOTNULL,

[CurrencyKey][int]NOTNULL,

[SalesTerritoryKey][int]NOTNULL,

[SalesOrderNumber][nvarchar](20) NOTNULL,

[OrderQuantity][smallint]NULL,

[UnitPrice][money]NULL,

CONSTRAINT[PK_ FactInternetSalesPartitioned]PRIMARYKEYCLUSTERED  (

[InternetSalesID],

[ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey]  )

)

ONps_OrderDateKey(OrderDateKey)

GO

(5)单击执行。

6.将数据插入已分区表中

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

INSERTINTO[dbo].[FactInternetSalesPartitioned]  (

[ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey],

[SalesOrderNumber],

[OrderQuantity],

[UnitPrice]  )

SELECT  [ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey],

[SalesOrderNumber],

[OrderQuantity],

[UnitPrice]  FROM[dbo].[FactInternetSales]  GO

(5)单击执行。

7.查看分区数据

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

SELECTProductKey,

OrderDateKey,

$PARTITION.pf_OrderDateKey (OrderDateKey) ASPartitionNo

FROMFactInternetSalesPartitioned

GO  SELECT$PARTITION.pf_OrderDateKey (OrderDateKey) ASPartitionNo,

COUNT(*) ASRows FROMFactInternetSalesPartitioned

GROUPBY$PARTITION.pf_OrderDateKey (OrderDateKey)

ORDERBYPartitionNo

GO

(5)单击执行。

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

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

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

(7)保持ServerSecurity/Database/'>SQLServerManagementStudio 打开,下一个练习还要使用此程序。

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

注意: 您可以复制此练习中所用的脚本,这些脚本位于 C:ServerSecurity/Database/'>SQLHOLSPartitioningSolutionPartition Processing 文件夹中的 PartitionProcessing.ssmssln 解决方案中。

1.新建ServerSecurity/Database/'>SQLServer脚本项目

(1)从开始->所有程序菜单中的 MicrosoftServerSecurity/Database/'>SQLServer2008程序组中启动ServerSecurity/Database/'>SQLServerManagementStudio。

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

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

· 服务器名称:(local)

· 身份验证:Windows 身份验证

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

(4)确保选中ServerSecurity/Database/'>SQLServer脚本,然后输入下列设置:

· 名称:Partition Processing

· 位置:C:ServerSecurity/Database/'>SQLHOLsPartitioningStarter

· 解决方案名称:Partition Processing

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

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

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

· 服务器名称:(local)

· 身份验证:Windows 身份验证

2.创建文件组和文件

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码(每个 FILENAME 参数都应单占一行)。

USE[master]  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2001]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2002]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2003]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILEGROUP [fg2004]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME=N'AdventureWorksDW_Data2001',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2001.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2001]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2002',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2002.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2002]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2003',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2003.ndf',

SIZE =2048KB , FILEGROWTH =1024KB) TOFILEGROUP [fg2003]  GO  ALTERDATABASE[AdventureWorksDW]ADDFILE  (NAME =N'AdventureWorksDW_Data2004',

FILENAME =N'C:Program FilesMicrosoftServerSecurity/Database/'>SQLServerMSServerSecurity/Database/'>SQL10.MSServerSecurity/Database/'>SQLSERVERMSServerSecurity/Database/'>SQLDATAAdventureWorksDW_Data2004.ndf',

SIZE =2048KB , FILEGROWTH =1024KB ) TOFILEGROUP [fg2004]  GO

(5)单击执行。

3.创建分区函数

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

CREATEPARTITION FUNCTIONpf_OrderDateKey(int)

ASRANGE RIGHT  FORVALUES(185,550)

GO

(5)单击执行。

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

4.创建分区方案

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。单击执行。

USEAdventureWorksDW

CREATEPARTITION SCHEME ps_OrderDateKey

ASPARTITION pf_OrderDateKey

TO(fg2001,fg2002,fg2003,fg2004)

GO

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

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

CREATETABLE[dbo].[FactInternetSalesPartitioned]  (

[InternetSalesID][int]IDENTITY(1,1) NOTNULL,

[ProductKey][int]NOTNULL,

[OrderDateKey][int]NOTNULL,

[DueDateKey][int]NOTNULL,

[ShipDateKey][int]NOTNULL,

[CustomerKey][int]NOTNULL,

[PromotionKey][int]NOTNULL,

[CurrencyKey][int]NOTNULL,

[SalesTerritoryKey][int]NOTNULL,

[SalesOrderNumber][nvarchar](20) NOTNULL,

[OrderQuantity][smallint]NULL,

[UnitPrice][money]NULL,

CONSTRAINT[PK_ FactInternetSalesPartitioned]PRIMARYKEYCLUSTERED  (

[InternetSalesID],

[ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey]  )

)

ONps_OrderDateKey(OrderDateKey)

GO

(5)单击执行。

6.将数据插入已分区表中

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

INSERTINTO[dbo].[FactInternetSalesPartitioned]  (

[ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey],

[SalesOrderNumber],

[OrderQuantity],

[UnitPrice]  )

SELECT  [ProductKey],

[OrderDateKey],

[DueDateKey],

[ShipDateKey],

[CustomerKey],

[PromotionKey],

[CurrencyKey],

[SalesTerritoryKey],

[SalesOrderNumber],

[OrderQuantity],

[UnitPrice]  FROM[dbo].[FactInternetSales]  GO

(5)单击执行。

7.查看分区数据

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

(2)右键单击ServerSecurity/Database/'>SQLQuery1.sql,然后单击重命名。

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

(4)键入下面的代码。

USEAdventureWorksDW

SELECTProductKey,

OrderDateKey,

$PARTITION.pf_OrderDateKey (OrderDateKey) ASPartitionNo

FROMFactInternetSalesPartitioned

GO  SELECT$PARTITION.pf_OrderDateKey (OrderDateKey) ASPartitionNo,

COUNT(*) ASRows FROMFactInternetSalesPartitioned

GROUPBY$PARTITION.pf_OrderDateKey (OrderDateKey)

ORDERBYPartitionNo

GO

(5)单击执行。

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

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

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

(7)保持ServerSecurity/Database/'>SQLServerManagementStudio 打开,下一个练习还要使用此程序。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294422-1-1.html 上篇帖子: 保护 SQL Server 数据库的十大绝招(转) 下篇帖子: 关于 SQL Server Compact 3.5 Beta2 的发布
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表