Jinja:调用Hive(气流)时发生未定义的错误

时间:2018-12-29 07:16:40

标签: hive jinja2 airflow

我正在Airflow(GC Composer)中设置DAG,并尝试在DataProcHiveOperator中使用Jinja2模板。但是我得到了jinja2.exceptions.UndefinedError: 'jinja' is undefined error。但是,在我的代码中,我什么都没有叫“ jinja”。我想念什么?

我已经在其他类似Stackoverflow的问题上尝试了许多建议,但是没有一个奏效(可能是因为我遗漏了某些东西)。 我曾尝试在DAG文件中创建一个名为“ jinja”的对象,但也无法正常工作。

这是我的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文件,由于上述错误,DAG甚至没有调用它。

SELECT 
    distinct original_color_flag,
    {{ execution_date }} as exec_date

from omni_offer.dim_color_flagged_models;

我要做的就是使用Jinja2日期模板运行查询。这样简单,但确实很难实现。 谢谢!

1 个答案:

答案 0 :(得分:0)

我设法用自己的代码找到问题。 为了使DataProcHiveOperator正常工作,有必要使用要使用的关键字词典创建一个名为“ jinja”的对象。这是我添加到我的.py代码中的代码段:

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

现在,如果我在.q文件中调用这些项目,它将读取并替换相应的文本。