2010-01-06 3 views
0

Je connais le concept de l'utilisation de partitions dans Oracle comme technique pour publier des ajouts incrémentiels dans des tables (dans un contexte DW).Partition Exchange en tant que technique de publication dans SQL Server?

(like this example)

Par exemple. un instantané quotidien pour une table de faits de marteau de données est chargé derrière les scènes dans une partition dans une table. par exemple avec date comme clé de partition (1 table partitionnée, avec une seule partition). Une fois la charge terminée, et le contenu validé, la partition peut être «échangée» dans la table de destination vraie (1 table partitionnée, avec de nombreuses partitions) en tant qu'événement de dictionnaire.

Le même type de modèle de publication est-il possible avec SQL Server 2008?

Répondre

0

Le partitionnement de table est disponible dans les éditions Developer et Enterprise du produit SQL Server et vous permettra d'effectuer ce processus - automatisé avec procs stockés, etc est un peu plus difficile mais est réalisable.

0

Oui, et voici un exemple pour les entreprises SQL Server 2008

fonction de partition par année 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 

schéma de partition pour la carte gammes de fichiers groupes. Pour cet exemple, je vais mapper toutes les partitions au groupe de fichiers PRIMARY.

/* Then a partition scheme */ 
CREATE PARTITION SCHEME myPRng 
AS PARTITION myPFun 
ALL TO ([PRIMARY]); 
GO 

Et une table de fait, divisé par année

/* Fact table partitioned by year */ 
CREATE TABLE factTbl (DateKey int, Value int) 
ON myPRng (DateKey) ; 
GO 

table Mise en scène, divisée de la même manière

/* Staging table partitioned the same way as the fact table */ 
CREATE TABLE stageTbl (DateKey int, Value int) 
ON myPRng (DateKey) ; 
GO 

Quelques données pour tester

/* 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); 

Et passer la partition de la table de transfert à la table de fait

/* From staging table to fact table */ 
ALTER TABLE stageTbl SWITCH PARTITION 4 TO factTbl PARTITION 4; 
GO 

Pour tester

SELECT * FROM factTbl 

Retours

DateKey  Value 
----------- ----------- 
20080205 10 
20080711 25 
20090525 43 
20100107 10 

Pour plus de détails, voir the msdn article.

Questions connexes