परिचय
SortCL, संरचित डेटा परिभाषा और हेरफेर की IRI भाषा, लंबे समय से मानों के दो या अधिक स्तंभों वाली बाहरी सेट फ़ाइलों से प्रतिस्थापन मान खींचने की क्षमता रखती है। इस क्षमता का उपयोग CoSort-संचालित Voracity ETL संचालन, फ़ील्डशील्ड छद्मनामीकरण और बहाली कार्यों में लुकअप ट्रांसफ़ॉर्म के लिए और RowGen परीक्षण डेटा संश्लेषण कार्यों में यादृच्छिक / मान्य-जोड़ी डेटा चयन के लिए किया जाता है।
ये सेट फ़ाइलें जानकारी के लिए बहुत अच्छी हैं जो अक्सर नहीं बदलती हैं। लेकिन क्योंकि सेट फ़ाइलों को स्तंभ सामग्री के आधार पर क्रमबद्ध किया जाना चाहिए, जब पंक्तियों को जोड़ने की आवश्यकता होती है तो उनका उपयोग करना बोझिल हो सकता है - खासकर जब सेट फ़ाइल खुली / उपयोग में हो।
इसके अलावा, एक सेट फ़ाइल की सामग्री अक्सर वास्तव में एक डेटाबेस में उत्पन्न होती है। उन मामलों में, एक अतिरिक्त चरण (जैसे आईआरआई वर्कबेंच 'कॉलम से फ़ाइल सेट करें' विज़ार्ड चलाना, या एक एसक्यूएल ऑपरेशन) को तालिका से मूल्यों को एक सेट फ़ाइल में निकालने के लिए नौकरी प्रवाह में जोड़ा जाना था।
इन कमियों को दूर करने के लिए, मौजूदा डेटाबेस तालिकाओं से प्रतिस्थापन मूल्यों का प्रत्यक्ष लुक-अप सक्षम किया गया है। डेटाबेस तालिका से लुकअप सेट फ़ाइलों के लिए पहले से मौजूद तालिका लुकअप के लिए समान सिंटैक्स और संरचना का उपयोग करते हैं। यह SortCL नौकरियों में कार्यात्मक स्थिरता बनाए रखता है और एक साथ अधिक मूल्यों (एकाधिक डेटाबेस और सेट फाइलों में) तक पहुंच प्रदान करता है।
वाक्यविन्यास
एक सेट फ़ाइल में डेटा तक पहुँचने के लिए SortCL फ़ील्ड विशेषता सिंटैक्स पारंपरिक रूप से रहा है:
SET="<Set_Source>"[<[ Search List ]>] [DEFAULT="string"] [ORDER=<Order Option>] [SELECT=<Select Option>] [SEARCH=<Search Option>]
जहां <स्रोत सेट करें> पैरामीटर सेट फ़ाइल के पथ नाम को दर्शाता है। यह पैरामीटर अब एक ODBC तालिका नाम और कनेक्शन स्ट्रिंग भी हो सकता है, ठीक उसी तरह जैसे कि infile या outfile स्टेटमेंट में उपयोग किया जाता है। तालिका लुकअप के मामले में खोज सूची पैरामीटर को इनपुट स्रोतों में से किसी एक फ़ील्ड को संदर्भित करना चाहिए।
आपका सॉर्टसीएल (या संगत) प्रोग्राम तब इस फ़ील्ड के मान और डेटाबेस में लुकअप कॉलम के बीच एक मैच की तलाश करेगा। यदि कोई मेल है, तो इस पंक्ति में प्रतिस्थापन कॉलम के मान का उपयोग नए फ़ील्ड के लिए अंतिम मान के रूप में किया जाएगा, जिसका नाम इनपुट स्रोतों में से किसी एक से संदर्भित फ़ील्ड से भिन्न होना चाहिए।
SET उप-विशेषता के प्रारंभिक कार्यान्वयन के लिए लुकअप में उपयोग किए गए तालिका कॉलम एक अतिरिक्त भाषा तत्व में निर्दिष्ट हैं: LOOKUP="<lvalue>,<प्रतिद्वंद्विता>"।
पैरामीटर lvalue तालिका में उस स्तंभ का नाम है जिसमें देखने के लिए मान होता है। यह एक सेट फ़ाइल में बाएं हाथ, या पहले, कॉलम से मेल खाता है। प्रतिद्वंद्विता भाग दो कॉलम सेट फ़ाइल में दाहिने हाथ के कॉलम से मेल खाता है, और जो भी कॉलम प्रतिस्थापन के रूप में लौटाया जाने वाला मान रखता है।
पारंपरिक सेट फ़ाइल लुकअप के साथ, यदि कोई मेल नहीं है तो एक डिफ़ॉल्ट मान निर्दिष्ट किया जाना चाहिए। DEFAULT ="स्ट्रिंग" सिंटैक्स, जहां "स्ट्रिंग" मैन्युअल रूप से निर्दिष्ट डिफ़ॉल्ट मान है, का उपयोग किया जाता है। किसी भी सेट फ़ाइल पैरामीटर के बीच कोई अल्पविराम नहीं होना चाहिए।
यह सब एक साथ रखकर, तालिका लुकअप के लिए सिंटैक्स का एक संभावित उदाहरण हो सकता है:
सेट ="new_schema.info; डीएसएन =नया MySQL;" [ACCOUNT_NUMBER] लुकअप=“ACCOUNTNUM, PHONENUM”
यह एक SortCL फ़ील्ड परिभाषा के भीतर एक पैरामीटर होना चाहिए। इस मामले में "जानकारी" तालिका में ACCOUNTNUM और PHONENUM नाम के कॉलम होने चाहिए।
उत्पादन में इन नए सेट लुकअप का उपयोग कैसे किया जा सकता है? इन IRI जॉब स्क्रिप्ट उदाहरणों पर विचार करें:
उदाहरण
उदाहरण 1 :डेटाबेस से प्रतिस्थापन मूल्यों का उपयोग करके डेटा को छद्म नाम दें।
यह फील्डशील्ड जॉब डीएसएन "मैंगल्ड" के माध्यम से एक्सेस किए गए "लुकअपटेबल" नामक तालिका में "आईडी" कॉलम से मूल्यों को देखता है। यदि आईडी फ़ील्ड इनपुट (एक टेक्स्ट फ़ाइल) में संदर्भित डेटाबेस तालिका के आईडी कॉलम के समान है, तो आउटपुट में सभी फ़ील्ड (एक टेक्स्ट फ़ाइल भी) को नकली लेकिन यथार्थवादी प्रतिस्थापन मानों से भी बदल दिया जाएगा। एक ही संदर्भित तालिका। यदि कोई मेल नहीं है, तो स्क्रिप्ट में निर्दिष्ट डिफ़ॉल्ट मान इसके बजाय आउटपुट होंगे।
/INFILE=sensitiveData.txt /PROCESS=DELIMITED /INCOLLECT=200 # limit to 200 records /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|") /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|") /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|") /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|") /REPORT /OUTFILE=pseudonymizedData.txt /PROCESS=RECORD /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid") /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename") /FIELD=(PSEUDO_SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”555-55-5555” LOOKUP="id,fakessn") /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")
उदाहरण 2 :एक अलग डेटाबेस से प्रतिस्थापन मूल्यों का उपयोग करके एक डेटाबेस तालिका से तीन स्तंभों को छद्म नाम दें, और शेष कॉलम को एन्क्रिप्ट करें।
यह स्क्रिप्ट "इनपुटटेबल" नाम की डेटाबेस तालिका से लिए गए आईडी फ़ील्ड के आधार पर एक लुकअप करती है, जो डीएसएन "मैंगल्ड" के माध्यम से एक्सेस की गई "लुकअपटेबल" नामक तालिका से "आईडी" कॉलम को देखती है। "fakeid", "fakename", "fakessn", और "fakeaddress" कॉलम में मिलान मान लिया जाएगा यदि तालिका में इनपुट डेटा आईडी फ़ील्ड से "id" कॉलम में कोई मेल है। यदि कोई मेल नहीं है, तो इसके बजाय डिफ़ॉल्ट मान आउटपुट होंगे।
आउटपुट को एक अलग लक्ष्य तालिका में भेजा जाएगा। आउटपुट को इनपुट के समान तालिका में भी भेजा जा सकता है, जो डेटा को जगह में छिपा देगा।
/INFILE=”inputTable;DSN=Mangled;” /PROCESS=ODBC /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|") /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|") /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|") /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|") /REPORT /OUTFILE=”outputTable;DSN=Mangled;” /PROCESS=ODBC /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid") /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename") /FIELD=(ENCRYPT_SSN=enc_fp_aes256_alphanum(SSN,”EPWD:p4PagGZq9k7JFaj6/J1/JQ==”, TYPE=ASCII, POSITION=3, SEPARATOR="|") /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")
उदाहरण 3 :विभिन्न प्रकार के मास्किंग विधियों से यथार्थवादी प्रतिस्थापन का उपयोग करके व्यक्तिगत रूप से पहचान योग्य जानकारी (पीआईआई) की रक्षा करना।
इनपुट फ़ाइल में कई कॉलम (फ़ील्ड) में PII है। यदि इनपुट CSV फ़ाइल में प्रथम नाम फ़ील्ड और "NAMES" तालिका में "FIRST_NAME" कॉलम के बीच कोई मेल है, तो उसी तालिका में "LAST_NAME" कॉलम से एक प्रतिस्थापन अंतिम नाम आउटपुट होगा। अंतिम नाम "NAMES" तालिका में व्यक्तिगत डेटा से ही भिन्न होते हैं।
/INFILES=personalData.csv /PROCESS=CSV /ALIAS=PERSONALDATA_CSV /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"") /FIELD=(LAST_NAME, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"") /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME="\"") /FIELD=(BIRTH_DATE, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",", FRAME="\"") /FIELD=(ADDRESS, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME="\"") /REPORT /OUTFILE=maskedData.csv /PROCESS=RECORD /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(LAST_NAME_DB_SET, TYPE=ASCII, POSITION=2, SEPARATOR=",", SET="NAMES;DSN=mangled;" [FIRST_NAME] LOOKUP="FNAME,LNAME") /FIELD=(SSNENC=enc_fp_aes256_alphanum(SSN), TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(BIRTH_DATEPLUS=BIRTH_DATE + 30, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",") /FIELD=(ADDRESSSET, TYPE=ASCII, POSITION=5, SEPARATOR=",", SET="C:/IRI/cosort100/sets/addresses.set" SELECT=ANY)
वही कार्य स्क्रिप्ट, मूल नाम तालिका के साथ एक मानचित्रण आरेख की रूपरेखा नीचे मेरे IRI कार्यक्षेत्र IDE में दिखाई गई है, जो ग्रहण पर बनी है:
उदाहरण 4 :IRI RowGen के साथ संदर्भात्मक रूप से सही परीक्षण डेटा उत्पन्न करना
एक डेटाबेस तालिका, या अन्य संभावित मामलों में कई तालिकाओं पर विचार करें, जो एक निश्चित तिथि के अनुरूप डेटा रखती हैं। IRI RowGen और टेबल लुकअप कार्यक्षमता के साथ, तिथियों का चयन करना संभव है (एक सेट फ़ाइल से या बेतरतीब ढंग से उत्पन्न) और आउटपुट में अधिक फ़ील्ड जोड़ना संभव है जो प्रदान की गई तिथि इनपुट के आधार पर यथार्थवादी मूल्यों के अनुरूप हैं।
इस उदाहरण में, दिनांक से संबंधित सभी डेटा नीचे दिखाए गए लुकअप तालिका में रखे गए हैं (हालाँकि इसे किसी भी संख्या में तालिकाओं से लिया जा सकता है)। तालिका में एक वर्ष की तिथियां और संबंधित संबंधित मान हैं:
DATE इनपुट फ़ील्ड में सेट फ़ाइल से, 3 तिथियां चुनी जाती हैं जो तालिका में शामिल तिथियों की सीमा के भीतर होती हैं।
सेट फ़ाइल में तीन प्रविष्टियाँ शामिल हैं:2019-10-11, 2019-11-11, और 2019-12-11।
/INFILE=random_file_placeholder /PROCESS=RANDOM /INCOLLECT=3 /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",", SET="C:/Users/Devon/Downloads/dates.set" SELECT=ALL) /REPORT /OUTFILE=testPriceData.xml /PROCESS=XML /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",") /FIELD=(OPEN, TYPE=ALPHA_DIGIT, POSITION=2, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170" LOOKUP="Date,Open") /FIELD=(HIGH, TYPE=ALPHA_DIGIT, POSITION=3, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="171" LOOKUP="Date,High") /FIELD=(LOW, TYPE=ALPHA_DIGIT, POSITION=4, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="169" LOOKUP="Date,Low") /FIELD=(CLOSE, TYPE=ALPHA_DIGIT, POSITION=5, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Close") /FIELD=(ADJ_CLOSE, TYPE=ALPHA_DIGIT, POSITION=6, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Adj_Close") /FIELD=(VOLUME, TYPE=ALPHA_DIGIT, POSITION=7, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="523210182" LOOKUP="Date,Volume")
इस उदाहरण से आउटपुट एक मानक XML फ़ाइल है जिसमें लुकअप मान शामिल हैं:
उदाहरण 5 :आईआरआई वोरैसिटी ईटीएल और रिपोर्टिंग जॉब में लुकअप ट्रांसफॉर्म करना
इस उदाहरण में, हमारे पास एक CSV फ़ाइल है जिसमें कई ग्राहकों की खाता संख्याएँ और पिछली देय राशियाँ हैं। MySQL में एक मास्टर ग्राहक तथ्य तालिका से अतिरिक्त मिलान जानकारी प्राप्त करने के लिए आउटपुट में दो क्षेत्रों में एक टेबल लुकअप का उपयोग किया जाएगा, उस तालिका के साथ मास्टर ग्राहक तालिका के रूप में कार्य किया जाएगा।
मास्टर टेबल में देय राशि के बारे में जानकारी नहीं होती है और इसमें इनपुट फ़ाइल की तुलना में कई अधिक ग्राहक होते हैं जो केवल अपराधी ग्राहक खाते दिखाता है। यह खाता संख्या के आधार पर तालिका से नाम और फ़ोन नंबर ढूंढता है और ग्राहक संपर्क जानकारी के साथ एक आसान रिपोर्ट प्रारूप में .XLSX स्प्रेडशीट में आउटपुट करता है।
इनपुट CSV
देखी जाने वाली मास्टर ग्राहक तालिका का स्निपेट
/INFILE=C:/Users/Devon/Downloads/accountnumsandamountDue.csv /PROCESS=CSV /ALIAS=accountnumsandamountDue /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"") /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"") /REPORT /OUTFILE="'Past Due',HEADER;report.xlsx" /PROCESS=XLSX /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR="\t") /FIELD=(LOOKUP_NAME,TYPE=ASCII,POSITION=2, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,NAME") /FIELD=(LOOKUP_PHONE,TYPE=ASCII,POSITION=3, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,PHONENUM") /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=4, SEPARATOR="\t")
आउटपुट "पिछले देय" रिपोर्ट
IRI कार्यक्षेत्र समर्थन
डेटाबेस तालिका लुकअप को नए फ़ील्ड नियम विज़ार्ड से एक नियम के रूप में सेट किया जा सकता है। इस प्रकार के नियम को जनरेशन नियमों के तहत "टेबल लुकअप" के रूप में संदर्भित किया जाता है, लेकिन इसका उपयोग कई स्रोतों या अन्य कार्यों में फ़ील्ड नियम के रूप में लक्ष्य के रूप में किया जा सकता है।
एक नियम के रूप में तालिका लुकअप का चयन करते समय, एक कनेक्शन प्रोफ़ाइल को या तो पहले से ही सेट किया जाना चाहिए या तब बनाया जाना चाहिए जब डेटाबेस टेबल और कॉलम नामों में से चुनने के लिए उपयोग करने के लिए कहा जाए।
वहां से, लुकअप के लिए उपयोग करने के लिए तालिका, लुकअप कॉलम और प्रतिस्थापन मान कॉलम का चयन करें। अब इस टेबल लुकअप को मैचर्स के आधार पर लागू करने के लिए एक नियम के रूप में सेट किया जा सकता है।
सेट को सेट से संशोधित किया जा सकता है:फ़ील्ड संपादक संवाद में तालिका लुकअप मान परिवर्तन प्रकार।
यदि तालिका लुकअप फ़ील्ड नियम पहले ही सेट और लागू किया जा चुका है, तो इसकी आवश्यकता नहीं है। हालांकि, यह डायलॉग टेबल लुकअप घटकों जैसे डीएसएन, टेबल, सर्च फील्ड, लुकअप कॉलम और परिणाम कॉलम के मैन्युअल संपादन की अनुमति देता है। यहां एक डिफ़ॉल्ट मान भी निर्दिष्ट किया जा सकता है।
सारांश
सेट लुकअप के पास अब सॉर्टसीएल में एक नया संभावित स्रोत है जो लुकअप के लिए आवश्यक डेटा प्राप्त करने में बहुत विस्तार और आसानी कर सकता है। यह रिश्तों को बनाए रखने वाले यथार्थवादी प्रतिस्थापन मूल्य प्रदान करने के लिए मास्किंग या डेटा जनरेशन ऑपरेशन में उपयोगी है।
भविष्य में, और भी डेटा स्रोतों को शामिल करने के लिए सेट का विस्तार किया जा सकता है। अधिक जानकारी के लिए अपने आईआरआई प्रतिनिधि से संपर्क करें।
- ध्यान दें कि वर्तमान में RowGen उपयोगकर्ता लुकअप पैरामीटर के बिना मानों के यादृच्छिक चयन के लिए सेट फ़ाइलों का लाभ उठाते हैं। डीबी टेबल लुकअप के पहले कार्यान्वयन में यह कार्यक्षमता समर्थित नहीं है। ऐसा इसलिए है क्योंकि प्रत्येक डेटाबेस में एक तालिका से एक यादृच्छिक पंक्ति का चयन करने के लिए एक विशिष्ट विधि या वाक्यविन्यास होता है; कुछ डेटाबेस यादृच्छिक चयन का बिल्कुल भी समर्थन नहीं कर सकते हैं।