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,但有時使用 pandas(或其他函式庫)在 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。然後,它以正確的順序運行查詢。
為什麼選擇 yato 而不是 dbt Core、SQLMesh 或 lea?
這個問題沒有好的答案,但 yato 的設計目的並不是完全取代 SQL 轉換協調器。 yato 旨在透過一些功能快速設定和配置。你給一個資料夾,裡面有一堆 SQL(或 Python),它就會運作。
你可以想像 yato 就像黑色一樣用於變換編排。只有一個參數,就可以了。
為什麼只有 DuckDB
目前 yato 僅支援 DuckDB 作為後端/方言。主要原因是 DuckDB 提供了客戶端/伺服器資料庫難以實現的功能。我不排除新增 Postgres 或雲端倉庫,但需要考慮如何做,尤其是在混合 SQL 和 Python 轉換時。
yato 可以支援 Jinja 模板嗎?
我沒有。我不確定是否應該。我認為當您將 Jinja 範本新增至 SQL 查詢時,您已經走得太遠了。我建議不要為此使用 yato。不過,如果您確實想使用 yato 並獲得 Jinja 支持,請與我聯繫。
小注意事項,yato 支援 SQL 查詢中的環境變數。
我可以貢獻嗎?
是的,顯然,現在該專案正處於早期階段,我很高興收到回饋和貢獻。請記住,這是一個小型協調器,覆蓋與其他協調器的全部差距是沒有意義的,因為只要使用它們,它們就很棒。