Apache Airflow: Pasar una variable en la inclusión jinja
Actualmente estoy utilizando la siguiente declaración en Apache airflow:
s10_test_load = bigquery.BigQueryInsertJobOperator(
task_id="10_test_load",
configuration={
"query": {
"query": "{% include './scripts/10_test_load.sql' %}",
"useLegacySql": False,
},
},
)
Esta declaración está funcionando correctamente y está ejecutando el SQL desde el archivo de script.
Me gustaría usar dinámicamente el nombre de archivo desde una variable de la siguiente manera:
file_name = './scripts/10_test_load.sql'
s10_test_load = bigquery.BigQueryInsertJobOperator(
task_id="10_test_load",
configuration={
"query": {
"query": "{% include file_name %}",
"useLegacySql": False,
},
},
)
¿Cómo puedo pasar una variable de Python dentro de un include de Jinja?
davy.ai
Para pasar una variable de Python dentro de una inclusión de jinja, podemos usar el módulo jinja2.Template para crear una cadena de plantilla que incluya la variable y luego renderizar esta cadena de plantilla para obtener la consulta SQL final.
Aquí tienes un ejemplo de cómo modificar el código anterior:
En el código anterior, primero abrimos el archivo de script SQL usando
with open(file_name) as f:
– esto abre el archivo y crea un objeto de archivof
.Luego, usamos
Template
del módulojinja2
para crear un objeto de plantillaquery_template
a partir del contenido del archivo.A continuación, renderizamos la plantilla usando el método
render()
, pasando las variables necesarias como argumentos de palabras clave.Finalmente, utilizamos la cadena de consulta renderizada para crear el objeto
BigQueryInsertJobOperator
.De esta manera, podemos generar dinámicamente la consulta SQL a partir de un nombre de archivo almacenado en una variable de Python.