Database
 sql >> डेटाबेस >  >> RDS >> Database

एससीडी टाइप 6

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

विभिन्न SCD प्रकारों के लिए सभी अद्यतन विधियों को IRI CoSort में SortCL प्रोग्राम का उपयोग करके पूरा किया जा सकता है। IRI Voracity में SortCL प्रोग्राम चलाते समय उपयोग की जाने वाली SCD जॉब स्क्रिप्ट बनाने में सहायता करने के लिए एक विज़ार्ड है। अधिकांश विविधताएं मूल डेटा स्रोत से रिकॉर्ड का मिलान करने के लिए एक पूर्ण बाहरी जुड़ाव का उपयोग करती हैं, जिसमें प्रत्येक से एक कुंजी की बराबरी करने के आधार पर अद्यतन स्रोत में रिकॉर्ड होते हैं। अद्यतन स्रोत में ऐसे रिकॉर्ड जिनका मिलान नहीं है, उन्हें मास्टर में जोड़ने की आवश्यकता है।

यहां एससीडी टाइप 6 का उपयोग करके एक आयामी फ़ाइल या तालिका को अपडेट करने का एक सिंहावलोकन है जहां मैं उत्पाद लागतों को बनाए रख रहा हूं। ProductCode . क्षेत्र के संबंध में शामिल होने से अद्यतन पूरा किया जाता है ।

टाइप 6 एससीडी

टाइप 6 एक हाइब्रिड है जो टाइप 1, टाइप 2 और टाइप 3 का संयोजन है। इसे टाइप 6 कहा जाता है क्योंकि 1+2+3=6। प्रत्येक रिकॉर्ड में निम्नलिखित फ़ील्ड होंगे:

  • उत्पाद कोड :  यह पहचानकर्ता कुंजी फ़ील्ड है।
  • लागत :उत्पाद की वर्तमान लागत।
  • ऐतिहासिक लागत :वह लागत जो उस रिकॉर्ड के लिए StartDate पर प्रभावी हो गई।
  • प्रारंभ दिनांक :वह तारीख जब ऐतिहासिक लागत प्रभावी हो गई।
  • समाप्ति तिथि :वह तिथि जिस पर रिकॉर्ड के लिए ऐतिहासिक लागत वर्तमान वर्तमान लागत नहीं थी। यदि ऐतिहासिक लागत अभी भी वर्तमान लागत है, तो समाप्ति तिथि 99991231 है।
  • वर्तमान :वाई अगर लागत अभी भी चालू है, एन अगर यह नहीं है

अभी के लिए आइए ProductCode . के रिकॉर्ड देखें जे245. आइए शुरू करते हैं जब सबसे पहले ऐतिहासिक लागत वर्तमान लागत थी। ऐतिहासिक लागत लागत के समान है। फिर ProductCode J245 के लिए एक रिकॉर्ड होता है और इसके नीचे दिखाए गए मान होते हैं:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
J245 385.25 385.25 20100215 99991231 Y

जब एक नई लागत को लागू करने की आवश्यकता होती है, तो अद्यतन रिकॉर्ड के मानों का उपयोग एक नया वर्तमान रिकॉर्ड जोड़ने के लिए किया जाता है। वर्तमान लागत उत्पाद कोड के साथ सभी रिकॉर्ड में J245 को लागत . में बदल दिया जाएगा ऐतिहासिक लागत . के दौरान अद्यतन रिकॉर्ड से मूल्य मौजूदा रिकॉर्ड के लिए वही रहता है। इसके अतिरिक्त, समाप्ति तिथि पुराने वर्तमान रिकॉर्ड के लिए प्रारंभ दिनांक . में बदल दिया गया है नए वर्तमान रिकॉर्ड के लिए। ProductCode . के साथ रिकॉर्ड में J245, वर्तमान लागत अद्यतन मास्टर फ़ाइल में फ़ील्ड में अब निम्न मान हैं:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
J245 425.25 425.25 20101001 99991231 Y
J245 425.25 385.25 20100215 20101001 N

अब हम अगली नई लागत के साथ अपडेट करेंगे और J245 रिकॉर्ड के लिए निम्नलिखित मान प्राप्त करेंगे:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
J245 450.50 450.50 20110430 99991231 Y
J245 450.50 425.25 20101001 20110430 N
J245 450.50 385.25 20100215 20101001 N

अंतिम अपडेट ऐसे रिकॉर्ड बनाता है जिनमें ये मान होते हैं:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
J245 550.50 550.50 20120701 99991231 Y
J245 550.50 450.50 20110430 20120701 N
J245 550.50 425.25 20101001 20110430 N
J245 550.50 385.25 20100215 20101001 N

यहाँ अद्यतन करने से पहले मास्टर फ़ाइल में मान दिए गए हैं:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
C123 125.50 125.50 20110228 99991231 Y
F112 2365.00 2365.00 20120101 99991231 Y
G101 19.25 19.25 20110930 99991231 Y
G101 19.25 21.25 20110501 20110930 N
J245 450.50 450.50 20110430 99991231 Y
J245 450.50 425.25 20101001 20110430 N
J245 450.50 385.25 20100215 20101001 N
S022 98.75 98.75 20110515 99991231 Y

सभी अपडेट डेटा का प्रारंभ दिनांक समान होगा . Update.dat स्रोत में निम्नलिखित मान शामिल हैं:

ProductCode लागत StartDate
F112 2425.00 20120701
J245 550.50 20120701
M447 101.75 20120701
S022 101.75 20120701

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

अगली स्क्रीन के साथ, आप यह निर्धारित करते हैं कि अपडेट डेटा कैसे मैप किया जाता है और अन्य फ़ील्ड या कॉलम मान कैसे सेट किए जाते हैं। अद्यतन.लागत फ़ील्ड को master6.CurrentCost . पर मैप किया जाएगा और अपडेट.स्टार्टडेट फ़ील्ड को master6.StartDate . पर मैप किया जाएगा . ध्वज क्षेत्र वह फ़ील्ड है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि रिकॉर्ड में नवीनतम फ़ील्ड मान हैं या नहीं। इस मामले में वह फ़ील्ड master6.current . है . यदि यह सबसे वर्तमान रिकॉर्ड है, तो CurrentCost फ़ील्ड और इतिहास लागत फ़ील्ड में समान मान होंगे। सकारात्मक मान फ़्लैग करें master6.Current . में मान है जो निर्धारित करता है कि फ़ील्ड मान ProductCode . के लिए नवीनतम मान हैं . जब ऐसा होता है, तो हमारे उदाहरण में मान "Y" होता है और नकारात्मक मान ध्वजांकित करें "एन" है। अंतिम फ़ील्ड इसमें उस फ़ील्ड का नाम शामिल होता है जो यह निर्धारित करने के लिए उपयोग किया गया मान रखता है कि रिकॉर्ड की लागत अब प्रभावी नहीं है और Master.EndDate उस मूल्य को धारण करता है। अंतिम मूल्य अंतिम फ़ील्ड . के मान के रूप में उपयोग किया जाता है जब रिकॉर्ड चालू हो।

अगली स्क्रीन मास्टर और अद्यतन स्रोतों के साथ किए गए जुड़ाव को परिभाषित करने के लिए है। आपको ध्यान देना चाहिए कि दोनों स्रोतों को उत्पाद कोड . के संबंध में आदेशित किया जाना चाहिए . यदि वे नहीं हैं, तो आपको क्रमबद्ध करें विकल्प के लिए ड्रॉपडाउन में NOT_SORTED का चयन करना होगा डेटा स्रोत के तहत जिसे सॉर्ट करने की आवश्यकता है।

यहाँ पहली नौकरी की स्क्रिप्ट है:

/INFILE=master6.dat
    /PROCESS=DELIMITED
    /ALIAS=master6
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENTCOST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENT, TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
/INFILE=update.dat
    /PROCESS=DELIMITED
    /ALIAS=update
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(COST, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')

/JOIN FULL_OUTER NOT_SORTED master6 update WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master6.dat
# Make changes to records that have the same ProductCode
# as records in the update file 
    /PROCESS=DELIMITED
    /FIELD=(MASTER6.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MASTER6.CURRENT EQ "Y" THEN UPDATE.STARTDATE ELSE MASTER6.ENDDATE)
    /FIELD=(CURRENT_NEW="N", TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /INCLUDE WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master6.dat
# Keep the records that have no updates 
    /PROCESS=DELIMITED
    /FIELD=(MASTER6.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.CURRENTCOST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.ENDDATE, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.CURRENT, TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /OMIT WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE
    /OMIT WHERE MASTER6.PRODUCTCODE EQ ""

/OUTFILE=master6.dat
# Add the records with new product codes
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /OMIT WHERE UPDATE.PRODUCTCODE EQ ""
    /INCLUDE WHERE UPDATE.PRODUCTCODE

समीक्षा करने के लिए,

  • वर्तमान लागत . का मान उन सभी रिकॉर्ड के लिए समान होगा जिनमें एक समान उत्पाद कोड है
  • प्रारंभ दिनांक वह तारीख है जब ऐतिहासिक लागत प्रभावी हो गया
  • एक उत्पाद कोड, के नवीनतम रिकॉर्ड के लिए
    • वर्तमान लागत . के लिए मान और ऐतिहासिक लागत वही हैं
    • समाप्ति तिथि 99991231 है
    • मान वर्तमान . में वाई है
  • उन रिकॉर्ड्स के लिए जो वर्तमान रिकॉर्ड नहीं हैं
    • समाप्ति तिथि वह तारीख है जब अगली और हालिया लागत प्रभावी हो गया
    • फ़ील्ड वर्तमान मान के लिए N है

नई मास्टर फ़ाइल को सॉर्ट नहीं किया जाएगा क्योंकि नए वर्तमान मास्टर रिकॉर्ड को मास्टर फ़ाइल के निचले भाग में जोड़ा गया था, जिसमें इस तरह के मान होंगे:

ProductCode लागत ऐतिहासिक लागत StartDate समाप्ति तिथि वर्तमान
C123 125.50 125.50 20110228 99991231 Y
F112 2425.00 2365.00 20120101 20120701 N
G101 19.25 19.25 20110930 99991231 Y
G101 19.25 21.25 20110501 20110930 N
J245 550.50 450.50 20110430 20120701 N
J245 550.50 425.25 20101001 20110430 N
J245 550.50 385.25 20100215 20101001 N
S022 101.75 98.75 20110515 20120701 N
F112 2425.00 2425.00 20120701 99991231 Y
J245 550.50 550.50 20120701 99991231 Y
M447 139.25 139.25 20120701 99991231 Y
S022 101.75 101.75 20120701 99991231 Y

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. माध्यिका की गणना करने का सबसे तेज़ तरीका क्या है?

  2. SQL वर्कलोड विश्लेषण आपकी कैसे मदद कर सकता है?

  3. होटल रूम बुकिंग सिस्टम के लिए डेटा मॉडल डिजाइन करना

  4. मेटाडेटा डिस्कवरी विज़ार्ड का उपयोग करना

  5. डेटाबेस यूनिट परीक्षण में निर्भरता और डेटा को अलग करने की कला