yato adalah orkestrator terkecil di dunia yang mengatur transformasi data SQL di atas DuckDB. Anda cukup memberikan folder dengan kueri SQL dan folder tersebut menebak DAG dan menjalankan kueri dalam urutan yang benar.
yato bekerja dengan Python 3.9+.
pip install yato-lib
Buat folder bernama sql
dan masukkan file SQL Anda ke dalamnya, misalnya Anda dapat menggunakan 2 kueri yang diberikan dalam folder contoh.
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 ()
Anda juga dapat menjalankan yato dengan cli:
yato run --db tmp.duckdb sql/
yato dirancang untuk bekerja berpasangan dengan dlt. dlt menangani pemuatan data dan yato transformasi data.
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 ()
Meskipun kita ingin melakukan semuanya menggunakan SQL, terkadang menulis transformasi dengan Python dengan panda (atau pustaka lain) mungkin lebih cepat.
Inilah mengapa Anda dapat menggabungkan transformasi SQL dan Python di yato.
Untuk melakukannya Anda dapat menambahkan file Python di folder transformasi. Dalam file Python ini Anda harus mengimplementasikan kelas Transformation
dengan metode run
. Jika Anda bergantung pada transformasi SQL lainnya, Anda harus mendefinisikan kueri SQL sumber dalam metode statis yang disebut source_sql
.
Di bawah ini contoh transformasi (seperti orders.py
). Kerangka kerja akan memahami bahwa pesanan harus dijalankan setelah 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 mendukung variabel env dalam kueri SQL (seperti pada contoh di bawah). Hati-hati secara default ini menimbulkan masalah jika variabel env tidak ditentukan.
SELECT {{ VALUE }}, {{ OTHER_VALUE }}
yato berjalan bergantung pada perpustakaan SQLGlot yang luar biasa untuk mengurai kueri SQL secara sintaksis dan membangun DAG dari dependensi. Kemudian, ia menjalankan kueri dalam urutan yang benar.
Mengapa memilih yato daripada dbt Core, SQLMesh atau lea?
Tidak ada jawaban yang bagus untuk pertanyaan ini tetapi yato belum dirancang untuk sepenuhnya menggantikan orkestrator transformasi SQL. yato dimaksudkan agar cepat dalam pengaturan dan konfigurasi dengan beberapa fitur. Anda memberikan folder dengan sekumpulan SQL (atau Python) di dalamnya dan itu berjalan.
Anda dapat membayangkan yato menyukai warna hitam untuk orkestrasi transformasi. Hanya satu parameter dan ini dia.
Mengapa hanya DuckDB
Untuk saat ini yato hanya mendukung DuckDB sebagai backend/dialek. Alasan utamanya adalah DuckDB menawarkan fitur yang sulit diimplementasikan dengan database klien/server. Saya tidak mengecualikan untuk menambahkan Postgres atau gudang cloud, tetapi perlu memikirkan bagaimana cara melakukannya, terutama saat menggabungkan transformasi SQL dan Python.
Bisakah yato mendukung templating Jinja?
saya tidak. Saya tidak yakin itu harus dilakukan. Saya pikir ketika Anda menambahkan templat Jinja ke kueri SQL Anda, Anda sudah terlalu jauh. Saya akan merekomendasikan untuk tidak menggunakan yato untuk ini. Namun jika Anda benar-benar ingin menggunakan yato dan mendapatkan dukungan Jinja, hubungi saya.
Catatan kecil, yato mendukung variabel env dalam kueri SQL.
Bisakah saya berkontribusi?
Ya tentu saja, saat ini proyek ini sedang dalam tahap awal dan saya akan dengan senang hati menerima masukan dan kontribusi. Ingatlah bahwa ini adalah orkestrator kecil dan menutupi seluruh celah dengan ochestrator lain tidak masuk akal karena hanya menggunakannya saja sudah luar biasa.