Jinja: неопределенная ошибка при вызове в Hive (Airflow) - PullRequest
0 голосов
/ 29 декабря 2018

Я настраиваю свою DAG в Airflow (GC Composer) и пытаюсь использовать шаблоны Jinja2 в моем DataProcHiveOperator.Но я получаю jinja2.exceptions.UndefinedError: 'jinja' is undefined error.Однако нигде в моем коде я не называю «дзиндзя».Чего мне не хватает?

Я уже перепробовал много предложений по другим подобным вопросам Stackoverflow, но ни один из них не сработал (возможно, из-за чего-то, чего мне не хватает).Я пытался создать объект под названием 'jinja' в моем файле DAG, но также не работал.

Это мой DAG

from airflow.models import DAG, Variable
from airflow.contrib.operators.dataproc_operator import DataProcHiveOperator, DataprocClusterScaleOperator
from airflow.utils.trigger_rule import TriggerRule
from datetime import datetime, timedelta, time

execution_date = "{{ ds }}"

args = {
    'owner': 'Raul Gregg',
    'start_date': datetime(2018,12,12),
    'provide_context': True,
    'depends_on_past': False,
    'retries': 0,
    'retry_delay': timedelta(seconds=30),
    'project_id': Variable.get('gcp_project'),
    'cluster_name': 'hive-cluster',
    'region': 'europe-west3'
}

dag = DAG('dag_testing', 
    default_args=args,
    max_active_runs=9,
    schedule_interval=timedelta(days=1)
    )

test_dim_facets = DataProcHiveOperator(
    task_id='test_dim_facets',
    query='/hql/tests/tests_dim_facets_1.q',
    dag=dag
    )

А вот и файл .q, который даже не вызывается группой обеспечения доступности баз данных из-за указанной выше ошибки:

SELECT 
    distinct original_color_flag,
    {{ execution_date }} as exec_date

from omni_offer.dim_color_flagged_models;

Все, что я хочу сделать, - это запустить запрос с шаблоном даты Jinja2.Просто так, но очень трудно достичь.Спасибо!

1 Ответ

0 голосов
/ 29 декабря 2018

Мне удалось найти проблему с моим собственным кодом.Для правильной работы DataProcHiveOperator необходимо создать объект под названием «jinja» со словарем ключевых слов, которые вы собираетесь использовать.Вот фрагмент кода, который я добавил в свой код .py:

jinja = {
    """
    'ds': '{{ ds }}',
    'ds_nodash': '{{ ds_nodash }}'
    """
}

Теперь, если я вызову эти элементы в моем файле .q, он будет соответственно читать и заменять текст.

...