我熟悉在 Oracle 中使用分区作为向表发布增量添加的技术的概念(在 DW 上下文中)。
(像这个例子)
例如。数据集市事实表的每日快照会在后台加载到表中的分区中。例如使用日期作为分区键(1 个分区表,只有一个分区)。加载完成并验证内容后,可以将分区作为字典事件“交换”到真正的目标表(1 个分区表,具有许多分区)中。
SQL Server 2008 是否可以使用相同类型的发布模型?
我熟悉在 Oracle 中使用分区作为向表发布增量添加的技术的概念(在 DW 上下文中)。
(像这个例子)
例如。数据集市事实表的每日快照会在后台加载到表中的分区中。例如使用日期作为分区键(1 个分区表,只有一个分区)。加载完成并验证内容后,可以将分区作为字典事件“交换”到真正的目标表(1 个分区表,具有许多分区)中。
SQL Server 2008 是否可以使用相同类型的发布模型?
表分区在 SQL Server 产品的 Developer 和 Enterprise 版本中可用,并使您能够执行该过程 - 使用存储过程等自动执行此过程有点困难,但可以实现。
是的,这是 SQL Server 2008 企业版的示例
按年份划分函数1:= Y < 2008, 2:= 2008, 3:= 2009, 4:= 2010, 5:= Y >= 2011
/* First create a partition function */
CREATE PARTITION FUNCTION myPFun (int)
AS RANGE RIGHT FOR VALUES (20080101, 20090101, 20100101, 20110101);
GO
将范围映射到文件组的分区方案。对于此示例,我将所有分区映射到 PRIMARY 文件组。
/* Then a partition scheme */
CREATE PARTITION SCHEME myPRng
AS PARTITION myPFun
ALL TO ( [PRIMARY] );
GO
还有一个事实表,按年份分区
/* Fact table partitioned by year */
CREATE TABLE factTbl (DateKey int, Value int)
ON myPRng (DateKey) ;
GO
暂存表,分区方式相同
/* Staging table partitioned the same way as the fact table */
CREATE TABLE stageTbl (DateKey int, Value int)
ON myPRng (DateKey) ;
GO
一些要测试的数据
/* Populate fact table (years 2008, 2009)*/
INSERT INTO factTbl
( DateKey, Value )
VALUES ( 20080205, 10 )
, ( 20080711, 25 )
, ( 20090525, 43 );
/* Populate staging table (year 2010) */
INSERT INTO stageTbl
( DateKey, Value )
VALUES ( 20100107, 10 );
并将分区从登台表切换到事实表
/* From staging table to fact table */
ALTER TABLE stageTbl SWITCH PARTITION 4 TO factTbl PARTITION 4;
GO
去测试
SELECT * FROM factTbl
退货
DateKey Value
----------- -----------
20080205 10
20080711 25
20090525 43
20100107 10
有关详细信息,请参阅msdn 文章。