Mauro Ezequiel Bravo
EstudianteNicolás Muriel
EstudianteEric Bellet
ProfesorRoyer Guerrero Pinilla
EstudianteAlfonso Andres Zapata Guzman
EstudianteCarlos Eduardo Bracho Rosales
EstudianteEric Bellet
ProfesorMario Alexander Vargas Celis
EstudianteFederico Martinez
EstudianteFederico Martinez
EstudianteErick Rea Reasco
EstudianteEric Bellet
ProfesorEric Bellet
Profesorfrom 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
Wow, 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
Sí, posiblemente hagamos un curso pronto de DBT
📁 Este la herramienta que recomienda el profe al final de la clase https://docs.getdbt.com/docs/build/jinja-macros
Me 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
Un curso de DBT 🙏 please!!!
2024 seguro!
Los 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
¿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.
¿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.
Como hago para guardar variables en Airflow de forma segura? por ejemplo tokens o API keys?
Algún servicio de secret manager puede ser una solución, por ejemplo AWS Secrets
Secrets, en mi caso yo suelo usar Amazon Secrets