2013-03-07 7 views
8

समस्यासमस्याएं रुक-रुक कर विसंगतियों को समझने जब SSIS पैकेज

पारित कर दिया कुछ महीनों में नीचे वर्णित प्रक्रिया बिना किसी समस्या के काम किया है के दौरान साथ डेटा लोड हो रहा बार यह समाप्त हो गया है की एक विशाल बहुमत (2008 R2 पर)। हालांकि, हमने गलत तरीके से जुड़े डेटा के तीन उदाहरण हैं। सवाल यह है कि, इसका कारण क्या है और मैं इसका समाधान कैसे करूं?

DATA_PreImp 

    sourceid col01 col02 col03 col04 col... 
    100001  John Smith 
    100002  Calvin Klein 
    100003  Peter Parker 
    100004  Moe  Greene 

आमतौर पर प्रदान की गई नतीजा यह है कि विशेषता सही ढंग से लेकिन कभी कभी Items_Main से जुड़ा है (1% से कम) क्रम ताकि col01 के मूल्य के मूल्य के रूप में ही Items_Main से जुड़ा नहीं है अव्यवस्थित है शेष कॉलम।

इसके कारण होने वाली किसी भी अंतर्दृष्टि की सराहना की जाएगी।

डेटा प्रक्रिया

चलती हम एक SSIS पैकेज है कि एक फ्लैट तालिका (आधारित विशेषता) तीन संबंधित टेबल से मिलकर संरचना करने के लिए कहा जाता है DATA_PreImp से डेटा स्थानांतरित करता है।

  • Items_Main चाहिए DATA_PreImp में हर पंक्ति में एक पंक्ति है
  • Items_Featurevalues ​​DATA_PreImp में एक पंक्ति के प्रत्येक स्तंभ मान के लिए एक पंक्ति में शामिल है
  • Items_MainRel Items_Main और Items_FeatureValues ​​

के बीच संबंध होता है एसएसआईएस पैकेज में पहला कदम डेटाटाइन से डेटा DATA_PreImp से सम्मिलित करता है और जेनरेट पहचानकर्ता को TARGET_ID कॉलम में खाली DATA_PreImpMappingTMP तालिका में सम्मिलित करता है।

insert into items_main(creationdate, status) 
output inserted.itemid into DATA_PreImpMappingTMP(TARGET_ID) 
select getdate(), '0' from data_preimp 
order by sourceid asc; 

SSIS पैकेज में दूसरे चरण के लिए (मूल रूप से Itemid) TARGET_ID साथ Items_MainRel मेज और सुविधा के लिए एक पहचानकर्ता (इस मामले में एक 5 में) भरें।

insert into items_mainrel(itemid, featureid) 
output inserted.itemrelid into DATA_PreImpMapping2TMP(INDREL_ID) 
select TARGET_ID, 5 from DATA_PreImpMappingTMP 
order by TARGET_ID asc; 

तीसरे चरण DATA_PreImp से SOURCE_ID साथ DATA_PreImpMapping2TMP तालिका में SOURCE_ID कॉलम भरने के लिए है।

with cte as (select sourceid, row_number() over (order by sourceid asc) as row from data_preimp) 
update m set m.SOURCE_ID = s.sourceid, m.FEAT_ID = 5 
from DATA_PreImpMapping2TMP as m 
join cte as s on s.row = m.ROW; 

अंतिम चरण DATA_PreImpMapping2TMP और DATA_PreImp से डेटा के साथ Items_FeatureValues ​​तालिका भरने के लिए है।

insert into items_featurevalues(itemrelid, languageid, fnvarchar) 
select DATA_PreImpMapping2TMP.INDREL_ID, 0, data_preimp.col01 
from DATA_PreImpMapping2TMP 
join data_preimp on (DATA_PreImpMapping2TMP.SOURCE_ID = data_preimp.sourceid) 
where FEAT_ID = 5 

डेटा तालिका संरचना

यहाँ परिदृश्य बनाने के लिए आवश्यक है:

CREATE TABLE [dbo].[DATA_PreImp](
    [sourceid] [bigint] IDENTITY(1,1) NOT NULL, 
    [col01] [nvarchar](500) NULL, 
    [col02] [nvarchar](500) NULL, 
    [col03] [nvarchar](500) NULL, 
    [col04] [nvarchar](500) NULL, 
    [col05] [nvarchar](500) NULL, 
    [col06] [nvarchar](500) NULL, 
    [col07] [nvarchar](500) NULL, 
    [col08] [nvarchar](500) NULL, 
    [col09] [nvarchar](500) NULL, 
    [col10] [nvarchar](500) NULL, 
CONSTRAINT [PK_DATA_PreImp] PRIMARY KEY CLUSTERED 
(
    [sourceid] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[DATA_PreImpMappingTMP](
    [ROW] [int] IDENTITY(1,1) NOT NULL, 
    [TARGET_ID] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [ROW] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[Items_Main](
    [Itemid] [int] IDENTITY(1,1) NOT NULL, 
    [creationDate] [smalldatetime] NOT NULL, 
    [status] [int] NOT NULL, 
    [purchdate] [smalldatetime] NULL, 
    [logindate] [smalldatetime] NULL, 
CONSTRAINT [PK_Items_Main] PRIMARY KEY CLUSTERED 
(
    [Itemid] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[DATA_PreImpMapping2TMP](
    [ROW] [int] IDENTITY(1,1) NOT NULL, 
    [SOURCE_ID] [int] NULL, 
    [INDREL_ID] [int] NULL, 
    [FEAT_ID] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [ROW] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Items_Features](
    [featureId] [int] IDENTITY(1,1) NOT NULL, 
    [featureRef] [varchar](15) NOT NULL, 
    [featureName] [varchar](50) NOT NULL, 
    [creationDate] [smalldatetime] NOT NULL, 
    [status] [int] NOT NULL, 
    [fieldType] [varchar](50) NOT NULL, 
    [featureType] [int] NOT NULL, 
    [featureDesc] [varchar](500) NULL, 
CONSTRAINT [PK_Items_Features] PRIMARY KEY CLUSTERED 
(
    [featureId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 


CREATE TABLE [dbo].[Items_MainRel](
    [ItemRelId] [int] IDENTITY(1,1) NOT NULL, 
    [Itemid] [int] NOT NULL, 
    [featureId] [int] NOT NULL, 
CONSTRAINT [PK_Items_MainRel] PRIMARY KEY CLUSTERED 
(
    [ItemRelId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

CREATE TABLE [dbo].[Items_FeatureValues](
    [valueId] [int] IDENTITY(1,1) NOT NULL, 
    [ItemRelId] [int] NOT NULL, 
    [languageId] [int] NOT NULL, 
    [FnVarChar] [nvarchar](250) NULL, 
    [FInt] [int] NULL, 
    [FImage] [int] NULL, 
    [FNText] [ntext] NULL, 
    [FSmallDateTime] [smalldatetime] NULL, 
CONSTRAINT [PK_Items_FeatureValues] PRIMARY KEY CLUSTERED 
(
    [valueId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO  

ALTER TABLE [dbo].[Items_MainRel] WITH CHECK ADD CONSTRAINT [FK_Items_MainRel_Items_Features] FOREIGN KEY([featureId]) 
REFERENCES [dbo].[Items_Features] ([featureId]) 
GO 

ALTER TABLE [dbo].[Items_MainRel] CHECK CONSTRAINT [FK_Items_MainRel_Items_Features] 
GO 

ALTER TABLE [dbo].[Items_MainRel] WITH CHECK ADD CONSTRAINT [FK_Items_MainRel_Items_Main] FOREIGN KEY([Itemid]) 
REFERENCES [dbo].[Items_Main] ([Itemid]) 
GO 

ALTER TABLE [dbo].[Items_MainRel] CHECK CONSTRAINT [FK_Items_MainRel_Items_Main] 
GO 


ALTER TABLE [dbo].[Items_FeatureValues] WITH CHECK ADD CONSTRAINT [FK_Items_FeatureValues_Items_MainRel] FOREIGN KEY([ItemRelId]) 
REFERENCES [dbo].[Items_MainRel] ([ItemRelId]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[Items_FeatureValues] CHECK CONSTRAINT [FK_Items_FeatureValues_Items_MainRel] 
GO 


INSERT INTO DATA_PreImp (col01,col02,col03,col04) 
VALUES('John', 'Smith', '1964', 'NewYork'), 
     ('Calvin', 'Klein', '1960', 'Washington D. C.'), 
     ('Peter', 'Parker', '1974', 'Losangles'), 
     ('Moe', 'Greene', '1928', 'Lasvegas') 


INSERT INTO Items_Features (featureRef, featureName, creationDate, [status], fieldType, featureType, featureDesc) 
VALUES ('firstname','First_Name', GETDATE(), 0, 'FnVarChar', 3, 'FirstName'), 
    ('lastname','Last_Name', GETDATE(), 0, 'FnVarChar', 3, 'LastName'), 
    ('Birth','Birth', GETDATE(), 0, 'FnVarChar', 3, 'Birth'), 
    ('City','City', GETDATE(), 0, 'FnVarChar', 3, 'City') 
+0

मुझे दूसरी लिपि पर विदेशी कुंजी उल्लंघन मिलता है। डीबीओ में कोई रिकॉर्ड नहीं है।Feature_Features सुविधा आईडी = 5 (जैसा कि उस स्क्रिप्ट में हार्ड-कोड किया गया है)। क्या यह स्क्रिप्ट में इस्तेमाल किया जाने वाला एक अलग फीचर आईडी होना चाहिए या क्या dbo.Items_Features से एक रिकॉर्ड गायब है? – Aphillippe

+0

क्या आप अपने आवेषण में लेनदेन का उपयोग कर रहे हैं? एसएसआईएस पैकेज में त्रुटि प्रबंधन किसी भी उपयोगी डेटा फेंक देता है? क्या एक ही समय में एक ही डीबी/टेबल पर चल रही अन्य प्रक्रियाएं हैं जो समवर्ती मुद्दों का कारण बन सकती हैं? – Valkyrie

+1

इस जटिल के साथ, वास्तविक पैकेज और सभी आंतरिक कार्यों के बिना, समस्या का पता लगाने के लिए यह काफी चुनौतीपूर्ण होगा। हमें और अधिक जानकारी चाहिए .... – mrkb80

उत्तर

2

समस्या गणना स्तंभ CUST_CD था। बहुत सारे शोध के बाद, ऐसा लगता है कि बल्क इंसर्ट को जटिल गणना वाले प्रकार पसंद नहीं हैं (Using SQL Server spatial types in SSIS data load देखें)। समाधान गणना वाले कॉलम को हटाना है और इसे केवल एक वर्चर (20) न्यूल बनाना है। फिर मैंने एक नया निष्पादन एसक्यूएल टास्क बनाया जो गणना मूल्य के साथ किसी भी नल पंक्तियों को अद्यतन करता है।

संबंधित मुद्दे