2011-08-25 6 views
5

मेरे पास एक सपाट फ़ाइल है जो मौजूदा एसएसआईएस पैकेज के माध्यम से SQL सर्वर में आयात की जाती है। मुझे फ्लैट फ़ाइल में एक नए क्षेत्र को समायोजित करने के लिए पैकेज में बदलाव करने की आवश्यकता है। नया फ़ील्ड एक दिनांक फ़ील्ड है जो dd-mmm-yy प्रारूप में है (उदा। 25-AUG-11)। फ्लैट फ़ाइल में दिनांक फ़ील्ड या तो खाली हो जाएगी (उदा। एक स्पेस/व्हाइटस्पेस) या किसी दिनांक के साथ पॉप्युलेट। मेरे पास फ्लैट फ़ाइल में दिनांक प्रारूप पर कोई नियंत्रण नहीं है।मैं डेटा आयात के दौरान smalldatetime के लिए फ्लैट फ़ाइल में डीडी-एमएमएम-वाई मानों को कैसे प्रारूपित करूं?

मुझे फ्लैट फ़ाइल में दिनांक फ़ील्ड को मौजूदा SQL सर्वर तालिका में आयात करने की आवश्यकता है और लक्ष्य फ़ील्ड डेटा प्रकार smalldatetime है।

मैं लोड तालिका में स्ट्रिंग के रूप में तारीख को आयात करने का प्रस्ताव दे रहा था और फिर लोड तालिका से डेटा लेते समय smalldatetime में परिवर्तित कर रहा था। लेकिन लोड प्रारूप से smalldatetime में कनवर्ट करने के बिना इसे सीधे एक smalldatetime फ़ील्ड में लोड करने के लिए डेट प्रारूप डीडी-एमएमएम-वाई को पार्स करने का एक और संभावित तरीका है। मैं काफी नहीं सोच सकता कि डेट प्रारूप को विशेष रूप से महीने का विश्लेषण कैसे करें। कोई सुझाव स्वागत है।

उत्तर

7

यहां एक उदाहरण है जो आपको एक विचार दे सकता है कि आप क्या कर सकते हैं। आदर्श रूप में, एक एसएसआईएस पैकेज में या किसी भी ईटीएल नौकरी में, आपको यह ध्यान रखना चाहिए कि डेटा वही नहीं हो सकता है जो आप चाहते हैं। आपको गलत या अमान्य डेटा को संभालने के लिए उचित कदम उठाने की आवश्यकता है जो अब और फिर पॉप अप हो सकता है। यही कारण है कि एसएसआईएस डाटा फ्लो टास्क के भीतर कई बदलाव कार्यों के साथ आता है जिसे आप डेटा को साफ करने के लिए उपयोग कर सकते हैं।

अपने मामले में, आप अपनी आवश्यकताओं को प्राप्त करने के लिए Derived Column परिवर्तन या Data conversion परिवर्तन का उपयोग कर सकते हैं।

उदाहरण SSIS 2008 R2 में बनाया गया था। यह दिखाता है कि एक सारणी वाली एक फ्लैट फ़ाइल को कैसे पढ़ा जाए और SQL तालिका में लोड करें।

File

मैं फ्लैट फ़ाइल डेटा आयात करने के लिए एक सरल एसक्यूएल तालिका बनाया।

Table

SSIS पैकेज पर, मैं फ्लैट फ़ाइल के लिए एसक्यूएल से कनेक्शन प्रबंधक और एक है। नीचे दिखाए गए अनुसार फ्लैट फ़ाइल कनेक्शन कॉन्फ़िगर किया गया है।

Connection

Flat file 1

Flat file 2

Flat file 3

SSIS पैकेज पर, मैं नियंत्रण प्रवाह टैब पर डेटा प्रवाह कार्य रखा। अंदर, डेटा प्रवाह कार्य, मेरे पास एक फ्लैट फ़ाइल स्रोत, व्युत्पन्न कॉलम रूपांतरण और एक ओएलई डीबी गंतव्य है। चूंकि फ्लैट फ़ाइल स्रोत और ओएलई डीबी गंतव्य सीधा है, इसलिए मैं उन्हें यहां छोड़ दूंगा।व्युत्पन्न परिवर्तन (DT_DBDATE)SmallDate अभिव्यक्ति के साथ एक नया स्तंभ बनाता है। ध्यान दें कि आप ऐसा करने के लिए डेटा रूपांतरण परिवर्तन का भी उपयोग कर सकते हैं। यह नया कॉलम SmallDateTimeValue को ओएलई डीबी गंतव्य में डेटाबेस कॉलम में मैप किया जाना चाहिए।

Derived column

आप इस पैकेज पर अमल करते हैं, यह क्योंकि सभी फाइल में मान मान्य असफल हो जायेगी।

Failed

कारण है कि यह आपके मामले में विफल रहता है क्योंकि अमान्य डाटा सीधे तालिका में सम्मिलित किया जाता है। आपके मामले में, तालिका विफल होने के लिए पैकेज को अपवाद फेंक देगा। इस उदाहरण में, पैकेज विफल रहता है क्योंकि व्युत्पन्न कॉलम रूपांतरण पर डिफ़ॉल्ट सेटिंग किसी त्रुटि में घटक को विफल करना है। तो, त्रुटि पंक्तियों को पुनर्निर्देशित करने के लिए चलो एक डमी परिवर्तन रखें। हम इस उद्देश्य के लिए मल्टीकास्ट परिवर्तन करेंगे। यह वास्तव में कुछ भी नहीं करेगा। आदर्श रूप में, आपको ओएलई डीबी गंतव्य या अपनी पसंद के अन्य गंतव्य घटक का उपयोग करके त्रुटि पंक्तियों को किसी अन्य तालिका में रीडायरेक्ट करना चाहिए ताकि आप त्रुटियों का कारण बनने वाले डेटा का विश्लेषण कर सकें।

लाल तीर को व्युत्पन्न परिवर्तन से खींचें और इसे मल्टीकास्ट रूपांतरण से कनेक्ट करें। यह कॉन्फ़िगर त्रुटि आउटपुट संवाद पॉपअप करेगा। विफलता से Redirect row पर कॉलम त्रुटि और ट्रंकेशन के अंतर्गत मान बदलें। यह किसी भी त्रुटि पंक्तियों को मल्टीकास्ट रूपांतरण में रीडायरेक्ट करेगा और टेबल में नहीं मिलेगा।

Configure Error output

अब, अगर हम पैकेज पर अमल, इसे सफलतापूर्वक चलेंगे। प्रत्येक दिशा में प्रदर्शित पंक्तियों की संख्या पर ध्यान दें।

Success

यहाँ डेटा है कि तालिका में मिल गया है। केवल 2 पंक्तियां वैध थीं। आप पहले स्क्रीनशॉट को देख सकते हैं जो फ़ाइल में डेटा दिखाता है और आप देख सकते हैं कि केवल 2 पंक्तियां वैध थीं।

आशा है कि आपको एसएसआईएस पैकेज में अपनी आवश्यकता को लागू करने का विचार दें।

Table data

+1

स्क्रीनशॉट शानदार हैं, +1 – eddiegroves

3

इसे सीधे SMALLDATETIME फ़ील्ड में लोड करना चाहिए जैसा कि यह है। याद रखें, तिथियां SQL सर्वर में केवल संख्याएं हैं, जिन्हें उपयोगकर्ता को वांछित दिनांक/समय प्रारूप में प्रस्तुत किया जाता है। एसएसआईएस पैकेज को 25-AUG-2011 को दिनांक डेटा प्रकार के रूप में ठीक से पढ़ना चाहिए, और इसे बिना किसी समस्या के SMALLDATETIME फ़ील्ड में डालना चाहिए।

क्या पैकेज एक त्रुटि या कुछ फेंक रहा था?

+0

पैकेज एक रूपांतरण त्रुटि फेंक रहा था लेकिन somone मुझे बताया गया है कि इस वजह से रिकॉर्ड जो अंतरिक्ष/खाली स्थान के हैं तो मैं उनके लिए एक जांच करने के लिए और एक शून्य (DT_DATE) डालने की आवश्यकता हो सकती है। – suggy1982

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