การแปลงภาพใหม่สิบรายการใน AWS Glue Studio

การแปลงภาพใหม่สิบรายการใน AWS Glue Studio

โหนดต้นทาง: 2641422

AWS กาวสตูดิโอ เป็นอินเทอร์เฟซแบบกราฟิกที่ทำให้ง่ายต่อการสร้าง เรียกใช้ และตรวจสอบงานแยก แปลง และโหลด (ETL) ใน AWS กาว. ช่วยให้คุณเขียนเวิร์กโฟลว์การแปลงข้อมูลด้วยภาพโดยใช้โหนดที่แสดงขั้นตอนการจัดการข้อมูลที่แตกต่างกัน ซึ่งภายหลังจะถูกแปลงเป็นโค้ดโดยอัตโนมัติเพื่อเรียกใช้

AWS กาวสตูดิโอ เพิ่งเปิดตัว การแปลงภาพเพิ่มเติม 10 แบบเพื่อให้สามารถสร้างงานขั้นสูงในรูปแบบภาพโดยไม่ต้องใช้ทักษะการเขียนโค้ด ในโพสต์นี้ เราจะพูดถึงกรณีการใช้งานที่เป็นไปได้ซึ่งสะท้อนถึงความต้องการทั่วไปของ ETL

การแปลงใหม่ที่จะแสดงให้เห็นในโพสต์นี้ได้แก่: เชื่อมข้อมูล แยกสตริง อาร์เรย์ไปยังคอลัมน์ เพิ่มการประทับเวลาปัจจุบัน เปลี่ยน Pivot แถวเป็นคอลัมน์ ยกเลิกการเปลี่ยน Pivot คอลัมน์เป็นแถว ค้นหา ขยายอาร์เรย์หรือแมปลงในคอลัมน์ คอลัมน์ที่ได้รับมา และการประมวลผลสมดุลอัตโนมัติ .

ภาพรวมโซลูชัน

ในกรณีการใช้งานนี้ เรามีไฟล์ JSON บางส่วนที่มีการทำงานของตัวเลือกหุ้น เราต้องการแปลงก่อนที่จะจัดเก็บข้อมูลเพื่อให้ง่ายต่อการวิเคราะห์ และเรายังต้องการสร้างชุดข้อมูลสรุปแยกต่างหาก

ในชุดข้อมูลนี้ แต่ละแถวแสดงถึงการซื้อขายสัญญาออปชั่น ออปชันคือเครื่องมือทางการเงินที่ให้สิทธิ์—แต่ไม่ใช่ข้อผูกมัด—ในการซื้อหรือขายหุ้นในราคาคงที่ (เรียกว่า  ราคาใช้สิทธิ) ก่อนวันหมดอายุที่กำหนด

ป้อนข้อมูล

ข้อมูลเป็นไปตามสคีมาต่อไปนี้:

  • สั่งซื้อ_id - รหัสเฉพาะ
  • เครื่องหมาย – รหัสโดยทั่วไปใช้ตัวอักษรสองสามตัวเพื่อระบุบริษัทที่ปล่อยหุ้นอ้างอิง
  • ตราสาร – ชื่อที่ระบุตัวเลือกเฉพาะที่กำลังซื้อหรือขาย
  • เงินตรา – รหัสสกุลเงิน 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 เป็นเอกสิทธิ์เฉพาะบุคคล; เราสามารถรวมเป็นคอลัมน์เดียวที่มีหมายเลขสัญญา และมีคอลัมน์อื่นระบุว่าสัญญาซื้อหรือขายตามลำดับนี้หรือไม่
  • เราต้องการเก็บข้อมูลเกี่ยวกับการจัดสรรสัญญาแต่ละรายการแต่เป็นข้อมูลแต่ละแถว แทนที่จะบังคับให้ผู้ใช้จัดการกับอาร์เรย์ของตัวเลข เราสามารถบวกเลขได้ แต่เราจะสูญเสียข้อมูลเกี่ยวกับวิธีการสั่งซื้อ (ซึ่งบ่งชี้ถึงสภาพคล่องของตลาด) แต่เราเลือกที่จะทำให้ตารางไม่ปกติเพื่อให้แต่ละแถวมีจำนวนสัญญาเดียว โดยแยกคำสั่งซื้อที่มีหลายหมายเลขออกเป็นแถวแยกกัน ในรูปแบบคอลัมน์ที่บีบอัด ขนาดชุดข้อมูลเพิ่มเติมของการทำซ้ำนี้มักจะมีขนาดเล็กเมื่อใช้การบีบอัด ดังนั้นจึงเป็นที่ยอมรับในการทำให้ชุดข้อมูลค้นหาได้ง่ายขึ้น
  • เราต้องการสร้างตารางสรุปปริมาณสำหรับแต่ละประเภทออปชั่น (call and put) สำหรับหุ้นแต่ละตัว สิ่งนี้บ่งชี้ถึงอารมณ์ของตลาดสำหรับหุ้นแต่ละตัวและตลาดโดยทั่วไป (ความโลภ vs. ความกลัว)
  • เพื่อเปิดใช้งานการสรุปการค้าโดยรวม เราต้องการจัดเตรียมผลรวมทั้งหมดสำหรับการดำเนินการแต่ละรายการ และสร้างมาตรฐานของสกุลเงินเป็นดอลลาร์สหรัฐ โดยใช้การอ้างอิงการแปลงโดยประมาณ
  • เราต้องการเพิ่มวันที่ที่การเปลี่ยนแปลงเหล่านี้เกิดขึ้น สิ่งนี้อาจมีประโยชน์ เช่น เพื่อใช้อ้างอิงเมื่อมีการแปลงสกุลเงิน

จากข้อกำหนดเหล่านั้น งานจะสร้างผลลัพธ์สองรายการ:

  • ไฟล์ CSV พร้อมสรุปจำนวนสัญญาสำหรับแต่ละสัญลักษณ์และประเภท
  • ตารางแค็ตตาล็อกเพื่อเก็บประวัติของคำสั่งซื้อ หลังจากทำการเปลี่ยนแปลงที่ระบุ
    สคีมาข้อมูล

เบื้องต้น

คุณต้องมีบัคเก็ต S3 ของคุณเองเพื่อติดตามพร้อมกับกรณีการใช้งานนี้ หากต้องการสร้างบัคเก็ตใหม่ โปรดดูที่ การสร้างถัง.

สร้างข้อมูลสังเคราะห์

หากต้องการติดตามโพสต์นี้ (หรือทดลองกับข้อมูลประเภทนี้ด้วยตัวคุณเอง) คุณสามารถสร้างชุดข้อมูลนี้แบบสังเคราะห์ได้ สคริปต์ Python ต่อไปนี้สามารถเรียกใช้บนสภาพแวดล้อม Python โดยติดตั้ง Boto3 และเข้าถึงได้ บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (อเมซอน เอส3).

หากต้องการสร้างข้อมูล ให้ทำตามขั้นตอนต่อไปนี้:

  1. บน AWS Glue Studio ให้สร้างงานใหม่ด้วยตัวเลือก ตัวแก้ไขสคริปต์ Python เชลล์.
  2. ตั้งชื่องานและบน รายละเอียดงาน แท็บ เลือก ก บทบาทที่เหมาะสม และชื่อสำหรับสคริปต์ Python
  3. ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร รายละเอียดงาน ส่วนขยาย คุณสมบัติขั้นสูง และเลื่อนลงไป พารามิเตอร์งาน.
  4. ป้อนพารามิเตอร์ชื่อ --bucket และกำหนดเป็นค่าชื่อของบัคเก็ตที่คุณต้องการใช้เพื่อเก็บข้อมูลตัวอย่าง
  5. ป้อนสคริปต์ต่อไปนี้ลงในตัวแก้ไข AWS Glue shell:
    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 Glue

หากต้องการสร้างงานวิชวล AWS Glue ให้ทำตามขั้นตอนต่อไปนี้:

  1. ไปที่ AWS Glue Studio และสร้างงานโดยใช้ตัวเลือก ภาพด้วยผ้าใบเปล่า.
  2. Edit Untitled job เพื่อตั้งชื่อและกำหนด บทบาทที่เหมาะสมสำหรับ AWS Glue บน รายละเอียดงาน แถบ
  3. เพิ่มแหล่งข้อมูล S3 (คุณสามารถตั้งชื่อได้ JSON files source) และป้อน S3 URL ที่จัดเก็บไฟล์ (เช่น s3://<your bucket name>/transformsblog/inputdata/) จากนั้นเลือก JSON เป็นรูปแบบข้อมูล
  4. เลือก อนุมานสคีมา ดังนั้นจึงกำหนดสคีมาผลลัพธ์ตามข้อมูล

จากโหนดต้นทางนี้ คุณจะต้องผูกมัดการแปลง เมื่อเพิ่มการแปลงแต่ละครั้ง ตรวจสอบให้แน่ใจว่าโหนดที่เลือกนั้นเป็นโหนดสุดท้ายที่เพิ่ม เพื่อให้ถูกกำหนดเป็นพาเรนต์ เว้นแต่จะระบุไว้เป็นอย่างอื่นในคำแนะนำ

หากคุณไม่ได้เลือกพาเรนต์ที่ถูกต้อง คุณสามารถแก้ไขพาเรนต์ได้ตลอดเวลาโดยเลือกพาเรนต์นั้นและเลือกพาเรนต์อื่นในบานหน้าต่างการกำหนดค่า

การกำหนดค่าพาเรนต์ของโหนด

สำหรับแต่ละโหนดที่เพิ่ม คุณจะตั้งชื่อเฉพาะ (เพื่อให้จุดประสงค์ของโหนดแสดงในกราฟ) และการกำหนดค่าบน แปลง แถบ

ทุกครั้งที่การแปลงเปลี่ยนสคีมา (เช่น เพิ่มคอลัมน์ใหม่) สคีมาเอาต์พุตจำเป็นต้องได้รับการอัปเดตเพื่อให้การแปลงดาวน์สตรีมมองเห็นได้ คุณสามารถแก้ไขสคีมาเอาต์พุตด้วยตนเองได้ แต่การดำเนินการโดยใช้การแสดงตัวอย่างข้อมูลจะเป็นประโยชน์และปลอดภัยกว่า
นอกจากนี้ วิธีนี้ทำให้คุณสามารถยืนยันได้ว่าการแปลงทำงานจนถึงระดับที่คาดไว้ ในการทำเช่นนั้น ให้เปิด ดูตัวอย่างข้อมูล แท็บที่มีการแปลงที่เลือกและเริ่มเซสชันการแสดงตัวอย่าง หลังจากที่คุณตรวจสอบแล้วว่าข้อมูลที่แปลงแล้วมีลักษณะตามที่คาดไว้ ให้ไปที่ สคีมาเอาต์พุต และเลือก ใช้สคีมาการแสดงตัวอย่างข้อมูล เพื่ออัปเดตสคีมาโดยอัตโนมัติ

เมื่อคุณเพิ่มการแปลงประเภทใหม่ การแสดงตัวอย่างอาจแสดงข้อความเกี่ยวกับการพึ่งพาที่ขาดหายไป เมื่อเป็นเช่นนี้ให้เลือก สิ้นสุดเซสชัน และเริ่มโหนดใหม่ ดังนั้นการแสดงตัวอย่างจึงเลือกโหนดประเภทใหม่

แยกข้อมูลตราสาร

เริ่มต้นด้วยการจัดการกับข้อมูลชื่อตราสารเพื่อทำให้เป็นมาตรฐานในคอลัมน์ที่เข้าถึงได้ง่ายขึ้นในตารางเอาต์พุตที่เป็นผลลัพธ์

  1. เพิ่ม แยกสตริง โหนดและตั้งชื่อ Split instrumentซึ่งจะโทเค็นคอลัมน์เครื่องมือโดยใช้ regex ช่องว่าง: 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 คอลัมน์เป็นแถว โหนดและตั้งชื่อ Unpivot actions.
  2. เลือกคอลัมน์ bought และ sold เพื่อ unpivot และจัดเก็บชื่อและค่าในคอลัมน์ที่มีชื่อ action และ contractsตามลำดับ
    ยกเลิกการกำหนดค่า
    สังเกตว่าในการแสดงตัวอย่างคอลัมน์ใหม่ contracts ยังคงเป็นอาร์เรย์ของตัวเลขหลังจากการแปลงนี้
  1. เพิ่ม ระเบิดอาร์เรย์หรือแผนที่เป็นแถว แถวชื่อ Explode contracts.
  2. เลือก contracts คอลัมน์และป้อน contracts เป็นคอลัมน์ใหม่เพื่อแทนที่ (เราไม่จำเป็นต้องเก็บอาร์เรย์เดิมไว้)

การแสดงตัวอย่างตอนนี้แสดงให้เห็นว่าแต่ละแถวมีแถวเดียว contracts จำนวนเงิน และฟิลด์ที่เหลือจะเหมือนกัน

นี่ก็หมายความว่า order_id ไม่ใช่คีย์เฉพาะอีกต่อไป สำหรับกรณีการใช้งานของคุณเอง คุณต้องตัดสินใจว่าจะสร้างแบบจำลองข้อมูลของคุณอย่างไร และคุณต้องการทำให้เป็นปกติหรือไม่
ระเบิดการกำหนดค่า

ภาพหน้าจอต่อไปนี้เป็นตัวอย่างของลักษณะของคอลัมน์ใหม่หลังจากการเปลี่ยนแปลงจนถึงตอนนี้
ดูตัวอย่างข้อมูล

สร้างตารางสรุป

ตอนนี้คุณสร้างตารางสรุปพร้อมจำนวนสัญญาซื้อขายสำหรับแต่ละประเภทและแต่ละชื่อย่อหุ้น

สมมติว่าไฟล์ที่ประมวลผลเป็นของวันเดียวกันเพื่อจุดประสงค์ในการอธิบาย ดังนั้นข้อมูลสรุปนี้จึงให้ข้อมูลแก่ผู้ใช้ทางธุรกิจเกี่ยวกับความสนใจของตลาดและความคิดเห็นในวันนั้น

  1. เพิ่ม เลือกฟิลด์ โหนดและเลือกคอลัมน์ต่อไปนี้เพื่อเก็บไว้เป็นข้อมูลสรุป: symbol, typeและ contracts.
    ฟิลด์ที่เลือก
  2. เพิ่ม Pivot แถวเป็นคอลัมน์ โหนดและตั้งชื่อ Pivot summary.
  3. รวมบน contracts คอลัมน์โดยใช้ sum และเลือกแปลงไฟล์ type คอลัมน์.
    การกำหนดค่าเดือย

โดยปกติแล้ว คุณจะจัดเก็บไว้ในฐานข้อมูลภายนอกหรือไฟล์สำหรับการอ้างอิง ในตัวอย่างนี้ เราบันทึกเป็นไฟล์ CSV บน Amazon S3

  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. เปิดคอนโซล Athena ในภูมิภาคเดียวกับที่คุณใช้ AWS Glue
  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 Glue เพิ่ม ค้นหา โหนด (เป็นลูกของ 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. เลือก สร้างตารางใน Data Catalog และในการรันครั้งต่อๆ ไป ให้อัปเดตสคีมาและเพิ่มพาร์ติชั่นใหม่.
  4. ป้อนฐานข้อมูลเป้าหมายและชื่อสำหรับตารางใหม่ เช่น: option_orders.
    การกำหนดค่าอ่างล้างจาน

ตอนนี้ส่วนสุดท้ายของไดอะแกรมควรมีลักษณะคล้ายกับส่วนต่อไปนี้ โดยมีสองสาขาสำหรับสองเอาต์พุตที่แยกจากกัน
DAG

หลังจากที่คุณเรียกใช้งานสำเร็จแล้ว คุณสามารถใช้เครื่องมือเช่น Athena เพื่อตรวจสอบข้อมูลที่งานสร้างขึ้นโดยการสอบถามตารางใหม่ คุณสามารถค้นหาตารางในรายการ Athena และเลือก ดูตัวอย่างตาราง หรือเรียกใช้แบบสอบถาม SELECT (อัปเดตชื่อตารางเป็นชื่อและแค็ตตาล็อกที่คุณใช้):

SELECT * FROM default.option_orders limit 10

เนื้อหาตารางของคุณควรมีลักษณะคล้ายกับภาพหน้าจอต่อไปนี้
เนื้อหาตาราง

ทำความสะอาด

หากคุณไม่ต้องการเก็บตัวอย่างนี้ไว้ ให้ลบสองงานที่คุณสร้าง ตารางสองตารางใน Athena และพาธ S3 ที่จัดเก็บไฟล์อินพุตและเอาต์พุต

สรุป

ในโพสต์นี้ เราได้แสดงให้เห็นว่าการแปลงใหม่ใน AWS Glue Studio สามารถช่วยคุณทำการแปลงขั้นสูงเพิ่มเติมด้วยการกำหนดค่าขั้นต่ำได้อย่างไร ซึ่งหมายความว่าคุณสามารถใช้กรณีการใช้งาน ETL ได้มากขึ้นโดยไม่ต้องเขียนและดูแลโค้ดใดๆ การแปลงใหม่มีอยู่แล้วใน AWS Glue Studio ดังนั้นคุณจึงสามารถใช้การแปลงใหม่ในงานภาพของคุณได้แล้ววันนี้


เกี่ยวกับผู้เขียน

กอนซาโล่ Herreros เป็นสถาปนิก Big Data อาวุโสในทีม AWS Glue

ประทับเวลา:

เพิ่มเติมจาก AWS ข้อมูลขนาดใหญ่

ใช้คำสั่ง SQL ใหม่ MERGE และ QUALIFY เพื่อนำไปใช้และตรวจสอบความถูกต้องของการบันทึกข้อมูลการเปลี่ยนแปลงใน Amazon Redshift | อเมซอนเว็บเซอร์วิส

โหนดต้นทาง: 2896166
ประทับเวลา: กันยายน 22, 2023