yato เป็นผู้เรียบเรียงที่เล็กที่สุดในโลกเพื่อประสานการแปลงข้อมูล SQL บน DuckDB คุณเพียงแค่ให้โฟลเดอร์ที่มีการสืบค้น SQL จากนั้นมันจะเดา DAG และเรียกใช้การสืบค้นตามลำดับที่ถูกต้อง
yato ทำงานร่วมกับ Python 3.9+
pip install yato-lib
สร้างโฟลเดอร์ชื่อ sql
และใส่ไฟล์ SQL ของคุณลงไป ตัวอย่างเช่น คุณสามารถใช้ 2 แบบสอบถามที่ให้ไว้ในโฟลเดอร์ตัวอย่าง
from yato import Yato
yato = Yato (
# The path of the file in which yato will run the SQL queries.
# If you want to run it in memory, just set it to :memory:
database_path = "tmp.duckdb" ,
# This is the folder where the SQL files are located.
# The names of the files will determine the name of the table created.
sql_folder = "sql/" ,
# The name of the DuckDB schema where the tables will be created.
schema = "transform" ,
)
# Runs yato against the DuckDB database with the queries in order.
yato . run ()
คุณยังสามารถรัน yato ด้วย cli:
yato run --db tmp.duckdb sql/
yato ได้รับการออกแบบมาเพื่อทำงานร่วมกับ dlt dlt จัดการการโหลดข้อมูลและการแปลงข้อมูล
import dlt
from yato import Yato
yato = Yato (
database_path = "db.duckdb" ,
sql_folder = "sql/" ,
schema = "transform" ,
)
# You restore the database from S3 before runnning dlt
yato . restore ()
pipeline = dlt . pipeline (
pipeline_name = "get_my_data" ,
destination = "duckdb" ,
dataset_name = "production" ,
credentials = "db.duckdb" ,
)
data = my_source ()
load_info = pipeline . run ( data )
# You backup the database after a successful dlt run
yato . backup ()
yato . run ()
แม้ว่าเราจะชอบทำทุกอย่างที่เป็น SQL แต่บางครั้งการเขียนการแปลงใน Python ด้วย pandas (หรือไลบรารีอื่น ๆ ) อาจจะเร็วกว่า
นี่คือเหตุผลที่คุณสามารถผสมการแปลง SQL และ Python ใน yato ได้
โดยคุณสามารถเพิ่มไฟล์ Python ลงในโฟลเดอร์การแปลงได้ ในไฟล์ Python นี้ คุณต้องใช้คลาส Transformation
ด้วยวิธี run
หากคุณขึ้นอยู่กับการแปลง SQL อื่นๆ คุณต้องกำหนดการสืบค้น SQL ต้นทางในวิธีสแตติกที่เรียกว่า source_sql
ด้านล่างเป็นตัวอย่างของการเปลี่ยนแปลง (เช่น orders.py
) กรอบงานจะเข้าใจว่าคำสั่งซื้อจำเป็นต้องทำงานหลังจาก source_orders
from yato import Transformation
class Orders ( Transformation ):
@ staticmethod
def source_sql ():
return "SELECT * FROM source_orders"
def run ( self , context , * args , ** kwargs ):
df = self . get_source ( context )
df [ "new_column" ] = 1
return df
yato รองรับตัวแปร env ในการสืบค้น SQL (เช่นในตัวอย่างด้านล่าง) โปรดใช้ความระมัดระวังตามค่าเริ่มต้น อาจทำให้เกิดปัญหาหากไม่ได้กำหนดตัวแปร env
SELECT {{ VALUE }}, {{ OTHER_VALUE }}
yato ทำงานอาศัยไลบรารี SQLGlot ที่น่าทึ่งเพื่อแยกวิเคราะห์คำสั่ง SQL ทางวากยสัมพันธ์และสร้าง DAG ของการขึ้นต่อกัน จากนั้นจะเรียกใช้แบบสอบถามตามลำดับที่ถูกต้อง
เหตุใดจึงเลือก yato มากกว่า dbt Core, SQLMesh หรือ lea
ไม่มีคำตอบที่ดีสำหรับคำถามนี้ แต่ yato ไม่ได้ออกแบบมาเพื่อแทนที่ตัวจัดการการแปลง SQL โดยสมบูรณ์ yato ตั้งใจให้ติดตั้งและกำหนดค่าได้อย่างรวดเร็วด้วยคุณสมบัติบางอย่าง คุณให้โฟลเดอร์ที่มี SQL (หรือ Python) จำนวนมากอยู่ข้างในและมันก็ทำงาน
คุณสามารถจินตนาการถึงยาโตะที่เป็นเหมือนสีดำในการเตรียมการแปลงร่างได้ มีเพียงพารามิเตอร์เดียวเท่านั้นและไปได้เลย
ทำไมต้อง DuckDB
ในขณะนี้ yato รองรับ DuckDB เป็นแบ็กเอนด์/ภาษาถิ่นเท่านั้น เหตุผลหลักก็คือ DuckDB นำเสนอฟีเจอร์ที่ยากต่อการนำไปใช้กับฐานข้อมูลไคลเอนต์/เซิร์ฟเวอร์ ฉันไม่ได้ยกเว้นการเพิ่ม Postgres หรือคลังข้อมูลบนคลาวด์ แต่จะต้องคิดว่าจะต้องทำอย่างไร โดยเฉพาะอย่างยิ่งเมื่อผสมการแปลง SQL และ Python
yato สามารถรองรับการสร้างเทมเพลต Jinja ได้หรือไม่?
ฉันไม่ได้. ฉันไม่แน่ใจว่าควร ฉันคิดว่าเมื่อคุณเพิ่มเทมเพลต Jinja ให้กับแบบสอบถาม SQL ของคุณ แสดงว่าคุณไปไกลเกินไปแล้ว ฉันอยากจะแนะนำว่าอย่าใช้ yato สำหรับสิ่งนี้ อย่างไรก็ตาม หากคุณต้องการใช้ yato จริงๆ และขอให้การสนับสนุนจาก Jinja ติดต่อฉัน
หมายเหตุขนาดเล็ก yato รองรับตัวแปร env ในแบบสอบถาม SQL
ฉันสามารถมีส่วนร่วมได้หรือไม่?
ใช่ เห็นได้ชัดว่าตอนนี้โครงการยังอยู่ในช่วงเริ่มต้น และฉันยินดีที่จะได้รับการตอบรับและการมีส่วนร่วม โปรดทราบว่านี่คือผู้เรียบเรียงขนาดเล็กและการปกปิดช่องว่างทั้งหมดกับผู้ควบคุม ochestrator รายอื่นนั้นไม่สมเหตุสมผลเพราะแค่ใช้พวกมันพวกมันก็ยอดเยี่ยม