AWS গ্লু স্টুডিওতে দশটি নতুন ভিজ্যুয়াল রূপান্তর

AWS গ্লু স্টুডিওতে দশটি নতুন ভিজ্যুয়াল রূপান্তর

উত্স নোড: 2641422

AWS গ্লু স্টুডিও এটি একটি গ্রাফিকাল ইন্টারফেস যা সহজে তৈরি করা, চালানো এবং নিরীক্ষণ করা, রূপান্তর করা এবং লোড করা (ETL) কাজগুলি এডাব্লুএস আঠালো. এটি আপনাকে নোডগুলি ব্যবহার করে দৃশ্যত ডেটা ট্রান্সফরমেশন ওয়ার্কফ্লোগুলি রচনা করতে দেয় যা বিভিন্ন ডেটা পরিচালনার পদক্ষেপগুলিকে উপস্থাপন করে, যা পরে চালানোর জন্য স্বয়ংক্রিয়ভাবে কোডে রূপান্তরিত হয়।

AWS গ্লু স্টুডিও সম্প্রতি মুক্তি কোডিং দক্ষতা ছাড়াই ভিজ্যুয়াল উপায়ে আরও উন্নত কাজ তৈরি করার অনুমতি দেওয়ার জন্য আরও 10টি ভিজ্যুয়াল রূপান্তর। এই পোস্টে, আমরা সম্ভাব্য ব্যবহারের ক্ষেত্রে আলোচনা করি যা সাধারণ ETL চাহিদাগুলিকে প্রতিফলিত করে।

এই পোস্টে যে নতুন রূপান্তরগুলি প্রদর্শিত হবে তা হল: কনক্যাটেনেট, স্প্লিট স্ট্রিং, কলামে অ্যারে, বর্তমান টাইমস্ট্যাম্প, কলামে পিভট সারি, সারিতে কলাম আনপিভট, লুকআপ, এক্সপ্লোড অ্যারে বা কলামে ম্যাপ, প্রাপ্ত কলাম এবং অটোব্যালেন্স প্রসেসিং .

সমাধান ওভারভিউ

এই ব্যবহারের ক্ষেত্রে, আমাদের কাছে স্টক বিকল্প অপারেশন সহ কিছু JSON ফাইল রয়েছে। বিশ্লেষণ করা সহজ করার জন্য আমরা ডেটা সংরক্ষণ করার আগে কিছু রূপান্তর করতে চাই এবং আমরা একটি পৃথক ডেটাসেটের সারাংশও তৈরি করতে চাই।

এই ডেটাসেটে, প্রতিটি সারি বিকল্প চুক্তির একটি ট্রেড উপস্থাপন করে। বিকল্পগুলি হল আর্থিক উপকরণ যা একটি নির্দিষ্ট মূল্যে স্টক শেয়ার কেনা বা বিক্রি করার অধিকার - কিন্তু বাধ্যবাধকতা প্রদান করে না (যাকে বলা হয়  ধর্মঘট মূল্য) একটি নির্দিষ্ট মেয়াদ শেষ হওয়ার তারিখের আগে।

তথ্য অন্তর্ভুক্তী

ডেটা নিম্নলিখিত স্কিমা অনুসরণ করে:

  • অর্ডার_আইডি - একটি অনন্য আইডি
  • প্রতীক - অন্তর্নিহিত স্টক শেয়ার নির্গত কর্পোরেশন সনাক্ত করতে সাধারণত কয়েকটি অক্ষরের উপর ভিত্তি করে একটি কোড
  • যন্ত্র - যে নামটি নির্দিষ্ট বিকল্প কেনা বা বিক্রি করা হচ্ছে তা চিহ্নিত করে
  • মুদ্রা - ISO কারেন্সি কোড যেখানে মূল্য প্রকাশ করা হয়
  • মূল্য - প্রতিটি বিকল্প চুক্তি কেনার জন্য যে পরিমাণ অর্থ প্রদান করা হয়েছিল (বেশিরভাগ এক্সচেঞ্জে, একটি চুক্তি আপনাকে 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]}

ETL প্রয়োজনীয়তা

এই ডেটাতে অনেকগুলি অনন্য বৈশিষ্ট্য রয়েছে, যা প্রায়শই পুরানো সিস্টেমে পাওয়া যায়, যা ডেটা ব্যবহার করা কঠিন করে তোলে।

নিম্নলিখিত ETL প্রয়োজনীয়তা:

  • যন্ত্রের নামে মূল্যবান তথ্য রয়েছে যা মানুষের বোঝার উদ্দেশ্যে করা হয়েছে; সহজ বিশ্লেষণের জন্য আমরা একে আলাদা কলামে স্বাভাবিক করতে চাই।
  • গুণাবলী bought এবং sold পারস্পরিক একচেটিয়া; আমরা চুক্তি সংখ্যার সাথে একটি একক কলামে তাদের একত্রীকরণ করতে পারি এবং অন্য একটি কলাম থাকতে পারি যা নির্দেশ করে যে চুক্তিগুলি এই ক্রমে কেনা বা বিক্রি করা হয়েছে কিনা৷
  • আমরা স্বতন্ত্র চুক্তি বরাদ্দ সম্পর্কে তথ্য রাখতে চাই তবে ব্যবহারকারীদের সংখ্যার অ্যারের সাথে মোকাবিলা করতে বাধ্য করার পরিবর্তে পৃথক সারি হিসাবে। আমরা সংখ্যা যোগ করতে পারি, কিন্তু অর্ডারটি কীভাবে পূরণ করা হয়েছিল সে সম্পর্কে আমরা তথ্য হারাবো (বাজারের তারল্য নির্দেশ করে)। পরিবর্তে, আমরা টেবিলটিকে অস্বাভাবিক করতে বেছে নিই যাতে প্রতিটি সারিতে একক সংখ্যক চুক্তি থাকে, একাধিক সংখ্যা সহ অর্ডারগুলিকে আলাদা সারিতে বিভক্ত করে। একটি সংকুচিত কলামার বিন্যাসে, যখন কম্প্রেশন প্রয়োগ করা হয় তখন এই পুনরাবৃত্তির অতিরিক্ত ডেটাসেটের আকার প্রায়ই ছোট হয়, তাই এটি ডেটাসেটকে সহজে জিজ্ঞাসা করার জন্য গ্রহণযোগ্য।
  • আমরা প্রতিটি স্টকের জন্য প্রতিটি বিকল্প প্রকারের (কল এবং পুট) ভলিউমের একটি সারাংশ টেবিল তৈরি করতে চাই। এটি প্রতিটি স্টক এবং সাধারণভাবে বাজারের জন্য বাজারের অনুভূতির একটি ইঙ্গিত প্রদান করে (লোভ বনাম ভয়)।
  • সামগ্রিক বাণিজ্য সংক্ষিপ্তসার সক্ষম করতে, আমরা প্রতিটি অপারেশনের জন্য গ্র্যান্ড মোট প্রদান করতে চাই এবং একটি আনুমানিক রূপান্তর রেফারেন্স ব্যবহার করে মুদ্রাকে মার্কিন ডলারে প্রমিত করতে চাই।
  • আমরা সেই তারিখটি যোগ করতে চাই যখন এই রূপান্তরগুলি ঘটেছিল। এটি দরকারী হতে পারে, উদাহরণস্বরূপ, কখন মুদ্রা রূপান্তর করা হয়েছিল তার একটি রেফারেন্স পেতে।

এই প্রয়োজনীয়তার উপর ভিত্তি করে, কাজ দুটি আউটপুট উত্পাদন করবে:

  • প্রতিটি প্রতীক এবং প্রকারের জন্য চুক্তির সংখ্যার সারাংশ সহ একটি CSV ফাইল৷
  • নির্দেশিত রূপান্তরগুলি করার পরে অর্ডারের ইতিহাস রাখার জন্য একটি ক্যাটালগ টেবিল
    ডেটা স্কিমা

পূর্বশর্ত

এই ব্যবহারের ক্ষেত্রে অনুসরণ করার জন্য আপনার নিজের S3 বালতি লাগবে। একটি নতুন বালতি তৈরি করতে, পড়ুন বালতি তৈরি হচ্ছে.

সিন্থেটিক ডেটা তৈরি করুন

এই পোস্টটি অনুসরণ করতে (অথবা আপনার নিজের মতো এই ধরনের ডেটা নিয়ে পরীক্ষা করুন), আপনি এই ডেটাসেটটি সিন্থেটিকভাবে তৈরি করতে পারেন। নিম্নলিখিত পাইথন স্ক্রিপ্টটি Boto3 ইনস্টল এবং অ্যাক্সেস সহ একটি পাইথন পরিবেশে চালানো যেতে পারে আমাজন সিম্পল স্টোরেজ সার্ভিস (Amazon S3)।

ডেটা তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. AWS গ্লু স্টুডিওতে, বিকল্পের সাথে একটি নতুন কাজ তৈরি করুন পাইথন শেল স্ক্রিপ্ট সম্পাদক.
  2. কাজের একটি নাম দিন এবং উপর চাকরির বিস্তারিত ট্যাব, একটি নির্বাচন করুন উপযুক্ত ভূমিকা এবং পাইথন স্ক্রিপ্টের জন্য একটি নাম।
  3. মধ্যে চাকরির বিস্তারিত বিভাগ, প্রসারিত করুন উন্নত বৈশিষ্ট্য এবং নিচে স্ক্রোল কাজের পরামিতি.
  4. নামের একটি প্যারামিটার লিখুন --bucket এবং নমুনা ডেটা সঞ্চয় করতে আপনি যে বালতি ব্যবহার করতে চান তার নামটি মান হিসাবে বরাদ্দ করুন।
  5. AWS গ্লু শেল এডিটরে নিম্নলিখিত স্ক্রিপ্টটি লিখুন:
    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. কাজটি চালান এবং রান ট্যাবে এটি সফলভাবে সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন (এটি মাত্র কয়েক সেকেন্ড লাগবে)।

প্রতিটি রান একটি JSON ফাইল তৈরি করবে যার 1,000টি সারি থাকবে নির্দিষ্ট বালতির নিচে এবং উপসর্গ 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 গ্লু ভিজ্যুয়াল কাজ তৈরি করুন

AWS গ্লু ভিজ্যুয়াল কাজ তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. AWS Glue Studio এ যান এবং বিকল্পটি ব্যবহার করে একটি চাকরি তৈরি করুন একটি ফাঁকা ক্যানভাস সঙ্গে ভিজ্যুয়াল.
  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 (সেই ক্রমে), এবং স্পেসার হিসাবে একটি হাইফেন।
    সংযুক্ত তারিখ কনফিগারেশন

এখন পর্যন্ত চিত্রটি নিম্নলিখিত উদাহরণের মতো হওয়া উচিত।

DAG

এখন পর্যন্ত নতুন কলামগুলির ডেটা প্রিভিউ নিম্নলিখিত স্ক্রিনশটের মতো হওয়া উচিত।

ডেটা প্রিভিউ

চুক্তির সংখ্যা স্বাভাবিক করুন

ডেটার প্রতিটি সারি প্রতিটি বিকল্পের চুক্তির সংখ্যা নির্দেশ করে যা কেনা বা বিক্রি করা হয়েছিল এবং যে ব্যাচগুলিতে অর্ডারগুলি পূরণ করা হয়েছিল। স্বতন্ত্র ব্যাচ সম্পর্কে তথ্য না হারিয়ে, আমরা প্রতিটি রাশিকে একটি একক পরিমাণের মান সহ একটি পৃথক সারিতে রাখতে চাই, বাকি তথ্যগুলি উত্পাদিত প্রতিটি সারিতে প্রতিলিপি করা হয়।

প্রথমে, একটি একক কলামে পরিমাণগুলিকে একত্রিত করা যাক।

  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 পাথ লিখুন যেখানে কাজের ভূমিকা ফাইলগুলি সংরক্ষণ করার অনুমতি দেওয়া হয়।

কাজের শেষ অংশটি এখন নিম্নলিখিত উদাহরণের মতো হওয়া উচিত।
DAG

  1. সংরক্ষণ করুন এবং কাজ চালান। ব্যবহার রান এটি সফলভাবে শেষ হয়েছে কিনা তা পরীক্ষা করতে ট্যাব।
    সেই এক্সটেনশন না থাকা সত্ত্বেও আপনি সেই পথের অধীনে একটি CSV ফাইল পাবেন৷ এটি খোলার জন্য আপনাকে সম্ভবত এটি ডাউনলোড করার পরে এক্সটেনশন যোগ করতে হবে।
    CSV পড়তে পারে এমন একটি টুলে, সারাংশটি নিম্নলিখিত উদাহরণের মতো দেখতে হবে।
    স্প্রেডশীট

অস্থায়ী কলাম পরিষ্কার করুন

ভবিষ্যৎ বিশ্লেষণের জন্য একটি ঐতিহাসিক সারণীতে অর্ডারগুলি সংরক্ষণ করার প্রস্তুতির জন্য, চলুন পথে তৈরি করা কিছু অস্থায়ী কলাম পরিষ্কার করা যাক।

  1. যুক্ত কর একটি ড্রপ ফিল্ডস সঙ্গে নোড Explode contracts নোড এর প্যারেন্ট হিসাবে নির্বাচিত (আমরা একটি পৃথক আউটপুট তৈরি করতে ডেটা পাইপলাইন শাখা করছি)।
  2. বাদ দেওয়ার জন্য ক্ষেত্রগুলি নির্বাচন করুন: instrument_arr, month, day, এবং year.
    বাকিগুলি আমরা রাখতে চাই যাতে সেগুলি ঐতিহাসিক টেবিলে সংরক্ষিত হয় যা আমরা পরে তৈরি করব।
    ক্ষেত্র ড্রপ

মুদ্রা প্রমিতকরণ

এই সিন্থেটিক ডেটাতে দুটি মুদ্রার কাল্পনিক ক্রিয়াকলাপ রয়েছে, তবে একটি বাস্তব ব্যবস্থায় আপনি সারা বিশ্বের বাজার থেকে মুদ্রা পেতে পারেন। একটি একক রেফারেন্স মুদ্রায় পরিচালনা করা মুদ্রাগুলিকে মানক করার জন্য এটি দরকারী যাতে প্রতিবেদন এবং বিশ্লেষণের জন্য সেগুলি সহজেই তুলনা এবং একত্রিত করা যায়।

আমরা ব্যাবহার করি অ্যামাজন অ্যাথেনা আনুমানিক মুদ্রা রূপান্তরগুলির সাথে একটি সারণী অনুকরণ করতে যা পর্যায়ক্রমে আপডেট হয় (এখানে আমরা ধরে নিই যে আমরা অর্ডারগুলিকে যথেষ্ট সময়মত প্রক্রিয়া করি যে রূপান্তরটি তুলনামূলক উদ্দেশ্যে একটি যুক্তিসঙ্গত প্রতিনিধি)।

  1. আপনি যেখানে AWS Glue ব্যবহার করছেন সেই একই অঞ্চলে Athena কনসোল খুলুন।
  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. এডব্লিউএস গ্লু ভিজ্যুয়াল কাজে ফিরে, একটি যোগ করুন লুকআপ নোড (এর সন্তান হিসাবে 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.
    টেবিল সিঙ্ক কনফিগারেশন

দুটি পৃথক আউটপুটের জন্য দুটি শাখা সহ চিত্রের শেষ অংশটি এখন নীচের মতো দেখতে হবে।
DAG

আপনি সফলভাবে কাজটি চালানোর পরে, আপনি নতুন টেবিলের অনুসন্ধানের মাধ্যমে কাজের উত্পাদিত ডেটা পর্যালোচনা করতে অ্যাথেনার মতো একটি টুল ব্যবহার করতে পারেন। আপনি এথেনা তালিকায় টেবিল খুঁজে পেতে এবং চয়ন করতে পারেন প্রাকদর্শন টেবিল অথবা শুধুমাত্র একটি SELECT ক্যোয়ারী চালান (আপনার ব্যবহৃত নাম এবং ক্যাটালগে টেবিলের নাম আপডেট করা):

SELECT * FROM default.option_orders limit 10

আপনার টেবিলের বিষয়বস্তু নিম্নলিখিত স্ক্রিনশটের মতো দেখতে হবে।
টেবিল বিষয়বস্তু

পরিষ্কার কর

আপনি যদি এই উদাহরণটি রাখতে না চান তবে আপনার তৈরি করা দুটি কাজ, অ্যাথেনার দুটি টেবিল এবং S3 পাথগুলি যেখানে ইনপুট এবং আউটপুট ফাইলগুলি সংরক্ষণ করা হয়েছিল তা মুছুন৷

উপসংহার

এই পোস্টে, আমরা দেখিয়েছি কিভাবে AWS Glue Studio-তে নতুন রূপান্তরগুলি আপনাকে সর্বনিম্ন কনফিগারেশনের সাথে আরও উন্নত রূপান্তর করতে সাহায্য করতে পারে। এর মানে হল আপনি কোন কোড লিখতে এবং বজায় না রেখেই আরও বেশি ETL ব্যবহারের ক্ষেত্রে প্রয়োগ করতে পারেন। নতুন রূপান্তরগুলি ইতিমধ্যেই AWS Glue Studio-তে উপলব্ধ, তাই আপনি আজকে আপনার ভিজ্যুয়াল কাজের ক্ষেত্রে নতুন রূপান্তরগুলি ব্যবহার করতে পারেন৷


লেখক সম্পর্কে

গঞ্জালো হেরেরোস AWS Glue দলের একজন সিনিয়র বিগ ডেটা আর্কিটেক্ট।

সময় স্ট্যাম্প:

থেকে আরো এডাব্লুএস বিগ ডেটা

অ্যামাজন রেডশিফ্টে পরিবর্তন ডেটা ক্যাপচার বাস্তবায়ন ও যাচাই করতে নতুন SQL কমান্ড মার্জ এবং কোয়ালিফাই ব্যবহার করুন | আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 2896166
সময় স্ট্যাম্প: সেপ্টেম্বর 22, 2023