Mauro Ezequiel Bravo
Estudiantefrom datetime import datetime from airflow import DAG from airflow.operators.bash import BashOperator templated_command = """ {% for file in params.filenames %} echo "{{ ds }}" echo "{{ file }}" {% endfor %} """ with DAG(dag_id="8-templating", description="Example using templates", schedule_interval="@daily", start_date=datetime(2022, 8, 10), end_date=datetime(2022, 8, 25), max_active_runs=1 ) as dag: t1 = BashOperator(task_id="tarea_1", bash_command=templated_command, params={"filenames": ["file1.txt", "file2.txt"]}, depends_on_past=True) t1
Nicolás Muriel
EstudianteWow, primera vez que mencionan dbt en platzi !
Recomendada para todos, es muy intuitiva, sobre todo si tenemos buenas bases en SQL.
Analytics Engineering tomando fuerza en el Modern Data Stack
Eric Bellet
ProfesorSí, posiblemente hagamos un curso pronto de DBT
Royer Guerrero Pinilla
Estudiante📁 Este la herramienta que recomienda el profe al final de la clase https://docs.getdbt.com/docs/build/jinja-macros
Alfonso Andres Zapata Guzman
EstudianteMe alegra no ser el unico que lo busco, me aparecio la misma pagina de primera opcion en google.
~ Que tal Platzinauta, ya conectamos en LinkedIn? ~
¡Que estas esperando! Conectemos en LinkedIn, GitHub, Medium o Redes sociales
Carlos Eduardo Bracho Rosales
EstudianteUn curso de DBT 🙏 please!!!
Eric Bellet
Profesor2024 seguro!
Mario Alexander Vargas Celis
EstudianteLos templates con Jinja son un mecanismo que permite generar contenido dinámico en aplicaciones y scripts utilizando el motor de plantillas Jinja2. Jinja2 es un motor de plantillas para Python ampliamente utilizado en herramientas como Flask, Django, y también en frameworks como Apache Airflow para crear configuraciones y comandos dinámicos.
Conceptos básicos
Un template es un archivo (generalmente texto o HTML) con marcadores de posición que pueden ser reemplazados dinámicamente por valores. Jinja2 permite utilizar variables, control de flujo (bucles y condicionales), y filtros para construir plantillas complejas.
Sintaxis básica
**Variables:**Hola, {{ nombre }}!
Esto reemplazará {{ nombre }} con el valor de la variable nombre.
Control de flujo:
Condicionales:{% if usuario %} Hola, {{ usuario }}! {% else %} Hola, invitado! {% endif %}
Bucles:{% for item in lista %} {{ item }} {% endfor %}
Filtros: Los filtros transforman datos, por ejemplo:{{ texto | upper }} # Convierte el texto a mayúsculas
Uso de Jinja en Apache Airflow
En Airflow, Jinja es crucial para construir comandos dinámicos en operadores como BashOperator, PythonOperator, o incluso configuraciones en tareas y sensores.
Ejemplo básico
Generar un archivo con un nombre dinámico basado en la fecha de ejecución:
from airflow import DAG from airflow.operators.bash import BashOperator from datetime import datetime
with DAG(dag_id="example_jinja", start_date=datetime(2024, 1, 1), schedule_interval="@daily", catchup=False) as dag:
t1 = BashOperator( task_id="create_file", bash_command="echo 'Archivo generado el {{ ds }}' > /tmp/archivo_{{ ds_nodash }}.txt" )
{{ ds }}: Representa la fecha de ejecución (por ejemplo, 2024-01-01).{{ ds_nodash }}: Fecha sin guiones (20240101), útil para nombres de archivos.Plantillas personalizadas
Puedes incluir variables adicionales en tus plantillas utilizando el argumento params:
t1 = BashOperator( task_id="custom_file", bash_command="echo 'Hola, {{ params.nombre }}!' > /tmp/saludo.txt", params={"nombre": "Mario"} )
Plantillas en otros contextos
HTML en aplicaciones web
Jinja es muy usado en frameworks como Flask o Django para generar contenido HTML dinámico.
<!DOCTYPE html> <html> <head> <title>Bienvenido</title> </head> <body> <h2>Hola, {{ usuario }}!</h2> <p>Hoy es {{ fecha | date('d/m/Y') }}.</p> </body> </html>
Configuraciones dinámicas
Jinja puede utilizarse en scripts de configuración, como YAML o JSON, para ajustar valores dinámicamente.
app_name: "{{ name }}" version: "{{ version }}"
Filtros útiles en Jinja
upper: Convierte a mayúsculas.
lower: Convierte a minúsculas.
replace: Reemplaza texto.{{ texto | replace('a', 'o') }}
default: Establece un valor predeterminado.{{ variable | default('valor por defecto') }}
Ventajas de Jinja
Federico Martinez
Estudiante¿Qué problemas resuelve Jinja en Airflow?
Jinja resuelve el problema de la rigidez en los DAGs, permitiendo que las tareas se adapten a diferentes contextos o datos sin modificar el código. Esto facilita la reutilización de código y la creación de pipelines más genéricos. Ayuda a gestionar la información cambiante de un flujo de manera eficiente.
Federico Martinez
Estudiante¿Cómo dinamizar tareas con Jinja?
Jinja permite insertar valores dinámicos en los parámetros de tus operadores, como fechas de ejecución o IDs de tareas, justo antes de que la tarea se ejecute. Esto evita la necesidad de "hardcodear" valores y hace que tus DAGs sean mucho más flexibles y reusables. Utiliza variables como {{ ds }} para acceder a la fecha de ejecución.
Erick Rea Reasco
EstudianteComo hago para guardar variables en Airflow de forma segura? por ejemplo tokens o API keys?
Eric Bellet
ProfesorAlgún servicio de secret manager puede ser una solución, por ejemplo AWS Secrets
Eric Bellet
ProfesorSecrets, en mi caso yo suelo usar Amazon Secrets