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

एससीडी टाइप 2

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

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

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

टाइप 2 एससीडी

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

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

प्रारंभिक तालिका में पहले से ही 3 इतिहास रिकॉर्ड हैं। वे वे हैं जिनका वर्तमान . फ़ील्ड के लिए मान N है . मास्टर स्रोत को Master2.dat कहा जाता है और इसमें निम्न डेटा होता है:

ProductCode लागत StartDate समाप्ति तिथि वर्तमान
C123 125.50 20110228 99991231 Y
F112 2365.00 20120101 99991231 Y
G101 19.25 20110930 99991231 Y
G101 21.25 20110501 20110930 N
J245 450.50 20110430 99991231 Y
J245 425.25 20101001 20110430 N
J245 385.25 20100215 20101001 N
S022 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 टाइप को चुनें। फिर विंडो जहां आप उन स्रोतों का चयन करते हैं जिनका उपयोग अद्यतन को संसाधित करने के लिए किया जाता है, प्रदर्शित होता है। टाइप 2 के लिए, लक्ष्य आम तौर पर मूल मास्टर फ़ाइल या टेबल होता है।

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

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

यहाँ कार्य स्क्रिप्ट है:

/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD2/master2.dat
  /PROCESS=DELIMITED
  /ALIAS=master2
  /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/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 master2 update WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master2.dat
# Include only records that are being updated
# Use the Cost and StartDate from the Update file 
  /PROCESS=DELIMITED
  /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ “Y"
/OUTFILE=master2.dat
# Change any current records that are being updated to history records
# by giving the EndDate as the StartDate from the update record 
# and changing the field Current to N
  /PROCESS=DELIMITED
  /CONDITION=(MATCH, TEST=(MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ "Y"))
  /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"', IF MATCH THEN UPDATE.STARTDATE ELSE MASTER2.ENDDATE)
  /FIELD=(CURRENT_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MATCH THEN "N" ELSE MASTER2.CURRENT)
  /OMIT WHERE MASTER2.PRODUCTCODE EQ ""
/OUTFILE=master2.dat
# Add new records
  /PROCESS=DELIMITED
  /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE UPDATE.PRODUCTCODE NE "" AND MASTER2.PRODUCTCODE EQ ""

नई मास्टर फ़ाइल में ये मान होंगे:

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

  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. एक डेटाबेस क्या है? परिभाषा, प्रकार और घटक

  3. sp_updatestats से बचने का एक और कारण

  4. आखिरी बार, नहीं, आप IDENT_CURRENT() पर भरोसा नहीं कर सकते

  5. कैसे एसक्यूएल में एक अद्वितीय बाधा को दूर करने के लिए?