แนะนำ Software-Defined Assets

Software-Defined Assets นี่เป็น concept ใหม่ใน Dagster ครับ เพิ่งประกาศอย่างเป็นทางการออกมาตอนวันที่ 1 มี.ค. 65 ที่ผ่านมา

ตอนแรกผมอ่านแล้วยังไม่ค่อยเห็นภาพว่ามันจะต่างจากพวก concept เดิมอย่าง op หรือ graph อย่างไรบ้าง ปกติก็ทำได้อยู่แล้วไม่ใช่เหรอไรงี้ จนวันนี้อยากจะลองทำความเข้าใจมากขึ้นเลยได้ดูวีดีโอนี้ (อัดไว้ตั้งแต่ปีที่แล้ว ตอนนั้นยังเป็น experimental API อยู่)

ถึงได้เข้าใจความดีงามของมันมากขึ้นครับ มันถูกพัฒนาบน graph/job/op APIs ครับ

การทำแบบนี้ทำให้การจัดการการไหลของข้อมูลของเราเป็นแบบ declarative approach (คือเขียนโค้ดเน้นว่าเราต้องการทำ “อะไร”)

เราสามารถเขียน asset แล้วเอาแต่ละ asset มาเชื่อมต่อกันได้ โดยประกาศเป็น function เฉยๆ แล้วใช้ asset key มาเป็น input parameter ประมาณตัวอย่างโค้ดสั้นๆ ด้านล่างนี้

from dagster import AssetGroup, asset


@asset
def upstream_asset():
    return [1, 2, 3]


@asset
def downstream_asset(upstream_asset):
    return upstream_asset + [4]


asset_group = AssetGroup([upstream_asset, downstream_asset])
  • upstream_asset เป็น asset ตัวแรก
  • downstream_asset รับ upstream_asset มาเป็น input parameter

จะเห็นได้ว่าเราไม่ต้องเอามาประกอบเป็น graph หรือ job แบบที่เราใช้ op เลย

ในวีดีโอด้านบนยังมีตัวอย่างให้ดู เราจะเห็นเลยว่า asset แต่ละอัน มัน produce ตัว materialization หรือ output ที่จับต้องได้ อะไรออกมา

และถ้าเรามีหลายๆ ทีม อยากจะใช้ asset ของอีกทีมหนึ่งก็สามารถทำได้โดยการสร้าง job ของตัวเองขึ้นมา แล้วอ้างอิงโดยใช้ asset key ของอีก job หนึ่งได้เลย

แล้วถ้าเราใช้ dbt เราก็แค่อ้างอิงไปที่ project path ของ dbt แล้วเดี๋ยว Dagster มันจะสร้างออกมาเป็น graph ให้เองด้วย!

สรุปแล้ว… ตามไปดูวีดีโอด้านบนกันครับ :joy: จะเข้าใจมากขึ้น ผมนี่หลงรักคอนเซปนี้ซะแล้วสิ

1 Like

อันนี้อีกวีดีโอหนึ่งครับ ที่งาน Data Council Austin '22 ที่เพิ่งจัดมาก่อนสงกรานต์สดๆ ร้อนๆ เลย

1 Like