एडब्ल्यूएस ग्लू स्टूडियो में दस नए दृश्य परिवर्तन

एडब्ल्यूएस ग्लू स्टूडियो में दस नए दृश्य परिवर्तन

स्रोत नोड: 2641422

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

AWS गोंद स्टूडियो हाल ही में जारी कोडिंग कौशल के बिना विज़ुअल तरीके से अधिक उन्नत नौकरियां बनाने की अनुमति देने के लिए 10 और दृश्य परिवर्तन। इस पोस्ट में, हम संभावित उपयोग के मामलों पर चर्चा करते हैं जो सामान्य ईटीएल आवश्यकताओं को दर्शाते हैं।

इस पोस्ट में प्रदर्शित किए जाने वाले नए परिवर्तन हैं: कॉन्टेनेट, स्प्लिट स्ट्रिंग, एरे टू कॉलम, वर्तमान टाइमस्टैम्प जोड़ें, कॉलम में पिवट पंक्तियाँ, पंक्तियों में अनपिवट कॉलम, लुकअप, एक्सप्लोड ऐरे या मैप इनटू कॉलम, व्युत्पन्न कॉलम, और ऑटोबैलेंस प्रोसेसिंग .

समाधान अवलोकन

इस उपयोग के मामले में, हमारे पास स्टॉक ऑप्शन ऑपरेशंस के साथ कुछ JSON फाइलें हैं। हम विश्लेषण करना आसान बनाने के लिए डेटा को संग्रहीत करने से पहले कुछ परिवर्तन करना चाहते हैं, और हम एक अलग डेटासेट सारांश भी तैयार करना चाहते हैं।

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

इनपुट डेटा

डेटा निम्न स्कीमा का अनुसरण करता है:

  • आदेश ID - एक यूनिक आईडी
  • प्रतीक - आमतौर पर निगम की पहचान करने के लिए कुछ अक्षरों पर आधारित एक कोड जो अंतर्निहित स्टॉक शेयरों का उत्सर्जन करता है
  • साधन – वह नाम जो खरीदे या बेचे जा रहे विशिष्ट विकल्प की पहचान करता है
  • मुद्रा - आईएसओ मुद्रा कोड जिसमें मूल्य व्यक्त किया गया है
  • मूल्य - वह राशि जो प्रत्येक विकल्प अनुबंध की खरीद के लिए भुगतान की गई थी (अधिकांश एक्सचेंजों पर, एक अनुबंध आपको 100 स्टॉक शेयर खरीदने या बेचने की अनुमति देता है)
  • एक्सचेंज - विनिमय केंद्र या स्थान का कोड जहां विकल्प का कारोबार किया गया था
  • बेचा – जब यह बिक्री व्यापार होता है तो बिक्री आदेश भरने के लिए आवंटित किए गए अनुबंधों की संख्या की एक सूची
  • खरीदा - अनुबंधों की संख्या की एक सूची जहां यह खरीद व्यापार होने पर खरीद ऑर्डर भरने के लिए आवंटित किया गया है

निम्नलिखित इस पोस्ट के लिए उत्पन्न सिंथेटिक डेटा का एक नमूना है:

{"order_id": 1679931512485, "symbol": "AMZN", "instrument": "AMZN MAR 24 23 102 PUT", "currency": "usd", "price": 17.18, "exchange": "EDGX", "bought": [18, 38]}
{"order_id": 1679931512486, "symbol": "BMW.DE", "instrument": "BMW.DE MAR 24 23 96 PUT", "currency": "eur", "price": 2.98, "exchange": "XETR", "bought": [28]}
{"order_id": 1679931512487, "symbol": "BMW.DE", "instrument": "BMW.DE APR 28 23 101 CALL", "currency": "eur", "price": 14.71, "exchange": "XETR", "sold": [9, 59, 54]}
{"order_id": 1679931512489, "symbol": "JPM", "instrument": "JPM JUN 30 23 140 CALL", "currency": "usd", "price": 11.83, "exchange": "EDGX", "bought": [33, 42, 55, 67]}
{"order_id": 1679931512490, "symbol": "SIE.DE", "instrument": "SIE.DE MAR 24 23 149 CALL", "currency": "eur", "price": 13.68, "exchange": "XETR", "bought": [96, 89, 82]}
{"order_id": 1679931512491, "symbol": "NKE", "instrument": "NKE MAR 24 23 112 CALL", "currency": "usd", "price": 3.23, "exchange": "EDGX", "sold": [67]}
{"order_id": 1679931512492, "symbol": "AMZN", "instrument": "AMZN MAY 26 23 95 CALL", "currency": "usd", "price": 11.44, "exchange": "EDGX", "sold": [41, 62, 12]}
{"order_id": 1679931512493, "symbol": "JPM", "instrument": "JPM MAR 24 23 121 PUT", "currency": "usd", "price": 1.0, "exchange": "EDGX", "bought": [61, 34]}
{"order_id": 1679931512494, "symbol": "SAP.DE", "instrument": "SAP.DE MAR 24 23 132 CALL", "currency": "eur", "price": 15.9, "exchange": "XETR", "bought": [69, 33]}

ईटीएल आवश्यकताएँ

इस डेटा में कई अनूठी विशेषताएँ हैं, जो अक्सर पुराने सिस्टम पर पाई जाती हैं, जो डेटा को उपयोग करने में कठिन बनाती हैं।

ईटीएल आवश्यकताएं निम्नलिखित हैं:

  • उपकरण के नाम में बहुमूल्य जानकारी है जो मनुष्यों को समझने के लिए अभिप्रेत है; हम आसान विश्लेषण के लिए इसे अलग-अलग कॉलम में सामान्यीकृत करना चाहते हैं।
  • गुण bought और sold परस्पर अनन्य हैं; हम उन्हें अनुबंध संख्या के साथ एक कॉलम में समेकित कर सकते हैं और एक अन्य कॉलम इंगित कर सकते हैं कि क्या अनुबंध इस क्रम में खरीदे या बेचे गए हैं।
  • हम व्यक्तिगत अनुबंध आवंटन के बारे में जानकारी रखना चाहते हैं लेकिन उपयोगकर्ताओं को संख्याओं की एक सरणी से निपटने के लिए मजबूर करने के बजाय अलग-अलग पंक्तियों के रूप में रखना चाहते हैं। हम संख्याओं को जोड़ सकते हैं, लेकिन हम इस बारे में जानकारी खो देंगे कि ऑर्डर कैसे भरा गया था (बाजार की तरलता का संकेत)। इसके बजाय, हम तालिका को असामान्य करना चुनते हैं ताकि प्रत्येक पंक्ति में अनुबंधों की एक ही संख्या हो, अलग-अलग पंक्तियों में कई संख्याओं के साथ विभाजन आदेश। एक संपीड़ित स्तंभ प्रारूप में, संपीड़न लागू होने पर इस पुनरावृत्ति का अतिरिक्त डेटासेट आकार अक्सर छोटा होता है, इसलिए डेटासेट को क्वेरी करना आसान बनाना स्वीकार्य है।
  • हम प्रत्येक स्टॉक के लिए प्रत्येक विकल्प प्रकार (कॉल और पुट) के लिए वॉल्यूम की सारांश तालिका बनाना चाहते हैं। यह प्रत्येक शेयर और सामान्य रूप से बाजार (लालच बनाम भय) के लिए बाजार की भावना का संकेत देता है।
  • समग्र व्यापार सारांश को सक्षम करने के लिए, हम प्रत्येक ऑपरेशन के लिए कुल योग प्रदान करना चाहते हैं और अनुमानित रूपांतरण संदर्भ का उपयोग करके मुद्रा को यूएस डॉलर में मानकीकृत करना चाहते हैं।
  • हम उस तारीख को जोड़ना चाहते हैं जब ये परिवर्तन हुए थे। यह उपयोगी हो सकता है, उदाहरण के लिए, मुद्रा रूपांतरण कब किया गया था, इस पर एक संदर्भ होना।

उन आवश्यकताओं के आधार पर, कार्य दो आउटपुट उत्पन्न करेगा:

  • प्रत्येक प्रतीक और प्रकार के अनुबंधों की संख्या के सारांश के साथ एक CSV फ़ाइल
  • संकेतित परिवर्तनों को करने के बाद, आदेश का इतिहास रखने के लिए एक कैटलॉग तालिका
    डेटा स्कीमा

.. पूर्वापेक्षाएँ

इस उपयोग मामले के साथ पालन करने के लिए आपको अपनी स्वयं की S3 बाल्टी की आवश्यकता होगी। एक नई बकेट बनाने के लिए, देखें एक बाल्टी बनाना.

सिंथेटिक डेटा उत्पन्न करें

इस पोस्ट के साथ पालन करने के लिए (या इस प्रकार के डेटा के साथ स्वयं प्रयोग करें), आप इस डेटासेट को कृत्रिम रूप से उत्पन्न कर सकते हैं। निम्न Python स्क्रिप्ट को Boto3 स्थापित और एक्सेस करने के साथ Python वातावरण पर चलाया जा सकता है अमेज़न सरल भंडारण सेवा (अमेज़न S3)।

डेटा उत्पन्न करने के लिए, निम्न चरणों को पूरा करें:

  1. एडब्ल्यूएस ग्लू स्टूडियो पर, विकल्प के साथ एक नया कार्य सृजित करें पायथन शेल स्क्रिप्ट संपादक.
  2. कार्य को एक नाम दें और पर नौकरी विवरण टैब, एक का चयन करें उपयुक्त भूमिका और पायथन लिपि के लिए एक नाम।
  3. में नौकरी विवरण खंड, विस्तार उन्नत गुण और नीचे स्क्रॉल करें नौकरी के पैरामीटर.
  4. नामित पैरामीटर दर्ज करें --bucket और उस बकेट के नाम को मान के रूप में असाइन करें जिसका उपयोग आप नमूना डेटा संग्रहीत करने के लिए करना चाहते हैं।
  5. एडब्ल्यूएस गोंद खोल संपादक में निम्न स्क्रिप्ट दर्ज करें:
    import argparse
    import boto3
    from datetime import datetime
    import io
    import json
    import random
    import sys # Configuration
    parser = argparse.ArgumentParser()
    parser.add_argument('--bucket')
    args, ignore = parser.parse_known_args()
    if not args.bucket: raise Exception("This script requires an argument --bucket with the value specifying the S3 bucket where to store the files generated") data_bucket = args.bucket
    data_path = "transformsblog/inputdata"
    samples_per_file = 1000 # Create a single file with synthetic data samples
    s3 = boto3.client('s3')
    buff = io.BytesIO() sample_stocks = [("AMZN", 95, "usd"), ("NKE", 120, "usd"), ("JPM", 130, "usd"), ("KO", 130, "usd"), ("BMW.DE", 95, "eur"), ("SIE.DE", 140, "eur"), ("SAP.DE", 115, "eur")]
    option_type = ["PUT", "CALL"]
    operations = ["sold", "bought"]
    dates = ["MAR 24 23", "APR 28 23", "MAY 26 23", "JUN 30 23"]
    for i in range(samples_per_file): stock = random.choice(sample_stocks) symbol = stock[0] ref_price = stock[1] currency = stock[2] strike_price = round(ref_price * 0.9 + ref_price * random.uniform(0.01, 0.3)) sample = { "order_id": int(datetime.now().timestamp() * 1000) + i, "symbol": stock[0], "instrument":f"{symbol} {random.choice(dates)} {strike_price} {random.choice(option_type)}", "currency": currency, "price": round(random.uniform(0.5, 20.1), 2), "exchange": "EDGX" if currency == "usd" else "XETR" } sample[random.choice(operations)] = [random.randrange(1,100) for i in range(random.randrange(1,5))] buff.write(json.dumps(sample).encode()) buff.write("n".encode()) s3.put_object(Body=buff.getvalue(), Bucket=data_bucket, Key=f"{data_path}/{int(datetime.now().timestamp())}.json")

  6. कार्य चलाएँ और तब तक प्रतीक्षा करें जब तक कि यह रन टैब पर सफलतापूर्वक पूरा न हो जाए (इसमें कुछ ही सेकंड लगने चाहिए)।

प्रत्येक रन बकेट निर्दिष्ट और उपसर्ग के तहत 1,000 पंक्तियों के साथ एक JSON फ़ाइल उत्पन्न करेगा transformsblog/inputdata/. यदि आप अधिक इनपुट फ़ाइलों के साथ परीक्षण करना चाहते हैं तो आप कार्य को कई बार चला सकते हैं।
सिंथेटिक डेटा में प्रत्येक पंक्ति एक डेटा पंक्ति है जो JSON ऑब्जेक्ट का प्रतिनिधित्व करती है:

{ "order_id":1681986991888, "symbol":"AMZN", "instrument":"AMZN APR 28 23 100 PUT", "currency":"usd", "price":2.89, "exchange":"EDGX", "sold":[88,49]
}

एडब्ल्यूएस गोंद दृश्य कार्य बनाएँ

AWS ग्लू विज़ुअल जॉब बनाने के लिए, निम्नलिखित चरणों को पूरा करें:

  1. एडब्ल्यूएस ग्लू स्टूडियो में जाएं और विकल्प का उपयोग करके नौकरी बनाएं एक खाली कैनवास के साथ दृश्य.
  2. संपादित करें Untitled job इसे एक नाम देने और असाइन करने के लिए AWS गोंद के लिए उपयुक्त भूमिका पर नौकरी विवरण टैब.
  3. एक S3 डेटा स्रोत जोड़ें (आप इसे नाम दे सकते हैं JSON files source) और S3 URL दर्ज करें जिसके तहत फ़ाइलें संग्रहीत की जाती हैं (उदाहरण के लिए, s3://<your bucket name>/transformsblog/inputdata/), फिर चुनें JSON डेटा प्रारूप के रूप में।
  4. चुनते हैं स्कीमा का अनुमान लगाएं इसलिए यह डेटा के आधार पर आउटपुट स्कीमा सेट करता है।

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

यदि आपने सही माता-पिता का चयन नहीं किया है, तो आप हमेशा माता-पिता को चुनकर और कॉन्फ़िगरेशन फलक में अन्य माता-पिता चुनकर संपादित कर सकते हैं।

नोड पैरेंट कॉन्फ़िगरेशन

जोड़े गए प्रत्येक नोड के लिए, आप इसे एक विशिष्ट नाम देंगे (इसलिए ग्राफ़ में नोड उद्देश्य दिखाता है) और कॉन्फ़िगरेशन पर बदालना टैब.

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

जैसे ही आप नए प्रकार के परिवर्तन जोड़ते हैं, पूर्वावलोकन अनुपलब्ध निर्भरता के बारे में एक संदेश दिखा सकता है। जब ऐसा होता है, चुनें सत्र समाप्त करें और एक नई शुरुआत करें, ताकि प्रीव्यू नए प्रकार के नोड को चुन सके।

साधन जानकारी निकालें

आइए इंस्ट्रूमेंट के नाम पर जानकारी को कॉलम में सामान्यीकृत करने के लिए शुरू करें जो परिणामी आउटपुट टेबल में एक्सेस करना आसान हो।

  1. एक जोड़ें स्प्लिट स्ट्रिंग नोड और इसे नाम दें Split instrument, जो व्हॉट्सएप रेगेक्स का उपयोग करके इंस्ट्रूमेंट कॉलम को टोकनाइज़ करेगा: s+ (इस मामले में एक ही स्थान पर्याप्त होगा, लेकिन यह तरीका अधिक लचीला और स्पष्ट रूप से स्पष्ट है)।
  2. हम मूल उपकरण जानकारी को वैसा ही रखना चाहते हैं, इसलिए विभाजित सरणी के लिए एक नया कॉलम नाम दर्ज करें: instrument_arr.
    स्प्लिट कॉन्फ़िगरेशन
  3. एक जोड़ें स्तंभों के लिए सरणी नोड और इसे नाम दें Instrument columns को छोड़कर, अभी बनाए गए सरणी कॉलम को नए फ़ील्ड में कनवर्ट करने के लिए symbol, जिसके लिए हमारे पास पहले से ही एक कॉलम है।
  4. कॉलम का चयन करें instrument_arr, पहले टोकन को छोड़ दें और इसे आउटपुट कॉलम निकालने के लिए कहें month, day, year, strike_price, type अनुक्रमणिका का उपयोग करना 2, 3, 4, 5, 6 (अल्पविराम के बाद रिक्त स्थान पठनीयता के लिए हैं, वे कॉन्फ़िगरेशन को प्रभावित नहीं करते हैं)।
    सरणी विन्यास

निकाले गए वर्ष को केवल दो अंकों के साथ व्यक्त किया जाता है; आइए एक स्टॉपगैप लगाते हैं यह मानने के लिए कि यह इस सदी में है अगर वे सिर्फ दो अंकों का उपयोग करते हैं।

  1. एक जोड़ें व्युत्पन्न स्तंभ नोड और इसे नाम दें Four digits year.
  2. दर्ज year व्युत्पन्न स्तंभ के रूप में इसलिए यह इसे ओवरराइड करता है, और निम्न SQL अभिव्यक्ति दर्ज करें:
    CASE WHEN length(year) = 2 THEN ('20' || year) ELSE year END
    वर्ष व्युत्पन्न स्तंभ कॉन्फ़िग

सुविधा के लिए, हम एक बनाते हैं expiration_date वह फ़ील्ड जो एक उपयोगकर्ता के पास अंतिम तिथि के संदर्भ के रूप में हो सकता है, विकल्प का प्रयोग किया जा सकता है।

  1. एक जोड़ें कॉलम जोड़ना नोड और इसे नाम दें Build expiration date.
  2. नए कॉलम को नाम दें expiration_date, कॉलम चुनें year, month, तथा day (उस क्रम में), और स्पेसर के रूप में एक हाइफ़न।
    कनेक्टेड दिनांक कॉन्फ़िगरेशन

आरेख अब तक निम्न उदाहरण की तरह दिखना चाहिए।

डेग

नए कॉलम का अब तक का डेटा पूर्वावलोकन निम्न स्क्रीनशॉट जैसा दिखना चाहिए।

डेटा पूर्वावलोकन

अनुबंधों की संख्या को सामान्य करें

डेटा में प्रत्येक पंक्ति खरीदे या बेचे गए प्रत्येक विकल्प के अनुबंधों की संख्या और उन बैचों को इंगित करती है जिन पर ऑर्डर भरे गए थे। अलग-अलग बैचों के बारे में जानकारी खोए बिना, हम चाहते हैं कि प्रत्येक राशि एक एकल पंक्ति मान के साथ एक व्यक्तिगत पंक्ति पर हो, जबकि शेष जानकारी उत्पादित प्रत्येक पंक्ति में दोहराई जाती है।

सबसे पहले, आइए राशियों को एक कॉलम में मिला दें।

  1. एक जोड़ें स्तंभों को पंक्तियों में अनपिवट करें नोड और इसे नाम दें Unpivot actions.
  2. कॉलम चुनें bought और sold नामित स्तंभों में नामों और मानों को खोलना और संग्रहीत करना action और contracts, क्रमशः।
    अनपिवट कॉन्फ़िगरेशन
    पूर्वावलोकन में ध्यान दें कि नया कॉलम contracts इस परिवर्तन के बाद भी संख्याओं की एक सरणी है।
  1. एक जोड़ें पंक्तियों में सरणी या मानचित्र विस्फोट करें पंक्ति नामित Explode contracts.
  2. चुनना contracts कॉलम और दर्ज करें contracts इसे ओवरराइड करने के लिए नए कॉलम के रूप में (हमें मूल सरणी रखने की आवश्यकता नहीं है)।

पूर्वावलोकन अब दिखाता है कि प्रत्येक पंक्ति में एक एकल है contracts राशि, और शेष क्षेत्र समान हैं।

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

निम्न स्क्रीनशॉट इसका एक उदाहरण है कि अब तक के परिवर्तनों के बाद नए कॉलम कैसे दिखते हैं।
डेटा पूर्वावलोकन

सारांश तालिका बनाएँ

अब आप प्रत्येक प्रकार और प्रत्येक स्टॉक प्रतीक के लिए ट्रेड किए गए अनुबंधों की संख्या के साथ एक सारांश तालिका बनाते हैं।

आइए उदाहरण के उद्देश्यों के लिए मान लें कि संसाधित की गई फाइलें एक ही दिन की हैं, इसलिए यह सारांश व्यापार उपयोगकर्ताओं को इस बारे में जानकारी देता है कि उस दिन बाजार की रुचि और भावना क्या है।

  1. एक जोड़ें फ़ील्ड्स चुनें नोड और सारांश के लिए रखने के लिए निम्न स्तंभों का चयन करें: symbol, type, तथा contracts.
    चयनित क्षेत्र
  2. एक जोड़ें पंक्तियों को स्तंभों में पिवट करें नोड और इसे नाम दें Pivot summary.
  3. पर एकत्र करें contracts कॉलम का उपयोग कर sum और कनवर्ट करना चुनें type स्तंभ.
    धुरी विन्यास

आम तौर पर, आप इसे संदर्भ के लिए किसी बाहरी डेटाबेस या फ़ाइल पर संग्रहीत करेंगे; इस उदाहरण में, हम इसे Amazon S3 पर CSV फ़ाइल के रूप में सहेजते हैं।

  1. एक जोड़ें ऑटोबैलेंस प्रोसेसिंग नोड और इसे नाम दें Single output file.
  2. हालाँकि उस ट्रांसफ़ॉर्म प्रकार का उपयोग सामान्य रूप से समानता को अनुकूलित करने के लिए किया जाता है, यहाँ हम इसका उपयोग आउटपुट को एक फ़ाइल में कम करने के लिए करते हैं। इसलिए प्रवेश करें 1 विभाजन विन्यास की संख्या में।
    ऑटोबैलेंस कॉन्फ़िगरेशन
  3. एक S3 लक्ष्य जोड़ें और इसे नाम दें CSV Contract summary.
  4. CSV को डेटा प्रारूप के रूप में चुनें और एक S3 पथ दर्ज करें जहाँ फ़ाइलों को संग्रहीत करने के लिए कार्य भूमिका की अनुमति है।

कार्य का अंतिम भाग अब निम्न उदाहरण की तरह दिखना चाहिए।
डेग

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

अस्थायी कॉलम साफ करें

भविष्य के विश्लेषण के लिए ऑर्डर को एक ऐतिहासिक तालिका में सहेजने की तैयारी में, आइए रास्ते में बनाए गए कुछ अस्थायी स्तंभों को साफ़ करें।

  1. एक जोड़ें ड्रॉप फील्ड्स के साथ नोड Explode contracts नोड को इसके माता-पिता के रूप में चुना गया है (हम एक अलग आउटपुट उत्पन्न करने के लिए डेटा पाइपलाइन को ब्रांच कर रहे हैं)।
  2. छोड़े जाने वाले क्षेत्रों का चयन करें: instrument_arr, month, day, तथा year.
    बाकी हम रखना चाहते हैं ताकि वे उस ऐतिहासिक तालिका में सहेजे जाएँ जिसे हम बाद में बनाएंगे।
    खेतों को गिराओ

मुद्रा मानकीकरण

इस सिंथेटिक डेटा में दो मुद्राओं पर काल्पनिक संचालन शामिल हैं, लेकिन वास्तविक प्रणाली में आप दुनिया भर के बाजारों से मुद्राएं प्राप्त कर सकते हैं। एकल संदर्भ मुद्रा में संभाली गई मुद्राओं को मानकीकृत करना उपयोगी है ताकि रिपोर्टिंग और विश्लेषण के लिए उनकी आसानी से तुलना की जा सके और उनका योग किया जा सके।

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

  1. एथेना कंसोल को उसी क्षेत्र में खोलें जहां आप एडब्ल्यूएस गोंद का उपयोग कर रहे हैं।
  2. S3 स्थान सेट करके तालिका बनाने के लिए निम्न क्वेरी चलाएँ जहाँ आपकी Athena और AWS Glue दोनों भूमिकाएँ पढ़ और लिख सकें। साथ ही, हो सकता है कि आप तालिका को किसी भिन्न डेटाबेस में संग्रहीत करना चाहें default (यदि आप ऐसा करते हैं, तो दिए गए उदाहरणों के अनुसार तालिका योग्य नाम अपडेट करें)।
    CREATE EXTERNAL TABLE default.exchange_rates(currency string, exchange_rate double)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    LOCATION 's3://<enter some bucket>/exchange_rates/';

  3. तालिका में कुछ नमूना रूपांतरण दर्ज करें:
    INSERT INTO default.exchange_rates VALUES ('usd', 1.0), ('eur', 1.09), ('gbp', 1.24);
  4. अब आपको निम्न क्वेरी के साथ तालिका देखने में सक्षम होना चाहिए:
    SELECT * FROM default.exchange_rates
  5. AWS ग्लू विज़ुअल जॉब पर वापस, एक जोड़ें लुक अप नोड (एक बच्चे के रूप में Drop Fields) और इसे नाम दें Exchange rate.
  6. आपके द्वारा अभी-अभी बनाई गई तालिका का गुणात्मक नाम दर्ज करें currency कुंजी के रूप में और चुनें exchange_rate उपयोग करने के लिए क्षेत्र।
    क्योंकि फ़ील्ड का नाम डेटा और लुकअप तालिका दोनों में समान है, हम केवल नाम दर्ज कर सकते हैं currency और मैपिंग को परिभाषित करने की आवश्यकता नहीं है।लुकअप कॉन्फ़िगरेशन
    इस लेखन के समय, डेटा पूर्वावलोकन में लुकअप रूपांतरण समर्थित नहीं है और यह एक त्रुटि दिखाएगा कि तालिका मौजूद नहीं है। यह केवल डेटा पूर्वावलोकन के लिए है और कार्य को ठीक से चलने से नहीं रोकता है। पोस्ट के कुछ शेष चरणों में आपको स्कीमा को अपडेट करने की आवश्यकता नहीं है। यदि आपको अन्य नोड्स पर डेटा पूर्वावलोकन चलाने की आवश्यकता है, तो आप लुकअप नोड को अस्थायी रूप से हटा सकते हैं और फिर इसे वापस रख सकते हैं।
  7. एक जोड़ें व्युत्पन्न स्तंभ नोड और इसे नाम दें Total in usd.
  8. व्युत्पन्न स्तंभ का नाम दें total_usd और निम्न SQL अभिव्यक्ति का उपयोग करें:
    round(contracts * price * exchange_rate, 2)
    मुद्रा रूपांतरण कॉन्फ़िगरेशन
  9. एक जोड़ें वर्तमान टाइमस्टैम्प जोड़ें नोड और कॉलम को नाम दें ingest_date.
  10. प्रारूप का प्रयोग करें %Y-%m-%d आपके टाइमस्टैम्प के लिए (प्रदर्शन उद्देश्यों के लिए, हम केवल तारीख का उपयोग कर रहे हैं; यदि आप चाहें तो इसे और अधिक सटीक बना सकते हैं)।
    टाइमस्टैम्प कॉन्फ़िगरेशन

ऐतिहासिक आदेश तालिका सहेजें

ऐतिहासिक आदेश तालिका को सहेजने के लिए, निम्न चरणों को पूरा करें:

  1. एक S3 लक्ष्य नोड जोड़ें और इसे नाम दें Orders table.
  2. तड़क-भड़क वाले संपीड़न के साथ Parquet प्रारूप को कॉन्फ़िगर करें, और एक S3 लक्ष्य पथ प्रदान करें जिसके तहत परिणामों को संग्रहीत किया जाए (सारांश से अलग)।
  3. चुनते हैं डेटा कैटलॉग में एक तालिका बनाएं और बाद के रन पर, स्कीमा को अपडेट करें और नए विभाजन जोड़ें.
  4. उदाहरण के लिए, लक्ष्य डेटाबेस और नई तालिका के लिए एक नाम दर्ज करें: option_orders.
    टेबल सिंक कॉन्फ़िगरेशन

आरेख के अंतिम भाग को अब दो अलग-अलग आउटपुट के लिए दो शाखाओं के साथ निम्न के समान दिखना चाहिए।
डेग

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

SELECT * FROM default.option_orders limit 10

आपकी तालिका सामग्री निम्न स्क्रीनशॉट के समान दिखनी चाहिए।
तालिका सामग्री

क्लीन अप

यदि आप इस उदाहरण को नहीं रखना चाहते हैं, तो आपके द्वारा बनाए गए दो कार्य, एथेना में दो तालिकाएँ, और S3 पथ जहाँ इनपुट और आउटपुट फ़ाइलें संग्रहीत की गई थीं, हटा दें।

निष्कर्ष

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


लेखक के बारे में

गोंजालो हेरेरोस एडब्ल्यूएस ग्लू टीम में वरिष्ठ बिग डेटा आर्किटेक्ट हैं।

समय टिकट:

से अधिक एडब्ल्यूएस बिग डेटा