yato は、DuckDB 上で SQL データ変換を調整する地球上で最小のオーケストレーターです。 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 ()
cli を使用して yato を実行することもできます。
yato run --db tmp.duckdb sql/
yato は dlt とペアで動作するように設計されています。 dlt はデータのロードを処理し、yato はデータ変換を処理します。
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 で変換を作成した方が速い場合があります。
これが、yato で SQL と Python 変換を混合できる理由です。
これを行うには、変換フォルダーに Python ファイルを追加します。この Python ファイルでは、 run
メソッドを使用してTransformation
クラスを実装する必要があります。他の SQL 変換に依存する場合は、 source_sql
という静的メソッドでソース 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 は、SQL クエリで環境変数をサポートします (以下の例のように)。 env 変数が定義されていない場合、デフォルトで問題が発生することに注意してください。
SELECT {{ VALUE }}, {{ OTHER_VALUE }}
yato の実行は、素晴らしい SQLGlot ライブラリに依存して SQL クエリを構文解析し、依存関係の DAG を構築します。その後、クエリが正しい順序で実行されます。
dbt Core、SQLMesh、lea ではなく yato を選ぶ理由は何ですか?
この質問に対する適切な答えはありませんが、yato は SQL 変換オーケストレーターを完全に置き換えるように設計されていません。 yato は、いくつかの機能を備えた迅速なセットアップと構成を目的としています。中に SQL (または Python) が大量に含まれるフォルダーを指定すると、それが実行されます。
変身オーケストレーションの黒のような夜トを想像することができます。パラメータは 1 つだけでOKです。
なぜ DuckDB だけなのか
現時点では、yato はバックエンド/方言として DuckDB のみをサポートしています。主な理由は、DuckDB がクライアント/サーバー データベースでは実装が難しい機能を提供していることです。 Postgres やクラウド ウェアハウスを追加することを除外するわけではありませんが、特に SQL と Python 変換を混合する場合は、その方法を考える必要があります。
yato は Jinja テンプレートをサポートできますか?
そうではありません。そうすべきかどうかはわかりません。 Jinja テンプレートを SQL クエリに追加する段階では、すでに限界を超えていると思います。これにはyatoを使用しないことをお勧めします。それでも、本当に yato を使用したい場合は、Jinja サポートに連絡してください。
ちょっとした注意点として、yato は SQL クエリで環境変数をサポートしています。
貢献できますか?
はい、明らかに、現在プロジェクトは初期段階にあり、フィードバックや貢献をいただければ幸いです。これは小規模なオーケストレーターであり、他のオケストレーターとのギャップをすべてカバーすることは意味がありません。なぜなら、それらは素晴らしいものであるため、使用するだけです。