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 변수를 지원합니다(아래 예와 같이). 기본적으로 env 변수가 정의되지 않으면 문제가 발생하므로 주의하세요.
SELECT {{ VALUE }}, {{ OTHER_VALUE }}
yato 실행은 놀라운 SQLGlot 라이브러리를 사용하여 SQL 쿼리를 구문 분석하고 종속성의 DAG를 구축합니다. 그런 다음 올바른 순서로 쿼리를 실행합니다.
dbt Core, SQLMesh 또는 lea 대신 yato를 선택하는 이유는 무엇입니까?
이 질문에 대한 좋은 대답은 없지만 yato는 SQL 변환 조정자를 완전히 대체하도록 설계되지 않았습니다. yato는 몇 가지 기능을 사용하여 빠르게 설정하고 구성할 수 있도록 만들어졌습니다. 내부에 SQL(또는 Python)이 포함된 폴더를 제공하면 실행됩니다.
변환 오케스트레이션을 위해 검은색과 같은 야토를 상상할 수 있습니다. 매개변수는 하나만 있으면 됩니다.
왜 DuckDB만 쓰는가?
현재 yato는 백엔드/방언으로 DuckDB만 지원합니다. 주된 이유는 DuckDB가 클라이언트/서버 데이터베이스로 구현하기 어려운 기능을 제공하기 때문입니다. Postgres나 클라우드 웨어하우스를 추가하는 것을 배제하지는 않지만, 특히 SQL과 Python 변환을 혼합할 때 어떻게 해야 할지 생각해야 합니다.
yato가 Jinja 템플릿을 지원할 수 있나요?
나는 그렇지 않습니다. 그래야 할지 잘 모르겠습니다. SQL 쿼리에 Jinja 템플릿을 추가할 때 이미 너무 멀리 왔다고 생각합니다. 나는 이것을 위해 yato를 사용하지 않는 것이 좋습니다. 그래도 정말로 yato를 사용하고 Jinja 지원을 받고 싶다면 나에게 연락하세요.
작은 메모, yato는 SQL 쿼리에서 env 변수를 지원합니다.
내가 기여할 수 있나요?
예, 물론입니다. 현재 프로젝트는 초기 단계에 있으므로 피드백과 기여를 기꺼이 받고 싶습니다. 이것은 소규모 오케스트레이터이며 다른 오케스트레이터와의 전체 격차를 커버하는 것은 의미가 없다는 점을 명심하십시오. 단지 그것들을 사용하는 것은 훌륭하기 때문입니다.