hive - Jinja:调用 Hive (Airflow) 时出现未定义错误
问题描述
我正在 Airflow (GC Composer) 中设置我的 DAG,并尝试在我的DataProcHiveOperator
. 但我得到一个jinja2.exceptions.UndefinedError: 'jinja' is undefined error
. 但是,在我的代码中没有任何地方我称之为“神社”。我错过了什么?
我已经尝试了很多关于其他 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 日期模板运行查询。就这么简单,但真的很难实现。谢谢!
解决方案
我设法用我自己的代码找到了问题。要使 DataProcHiveOperator 正常工作,有必要使用您要使用的关键字字典创建一个名为“jinja”的对象。这是我添加到 .py 代码中的片段:
jinja = {
"""
'ds': '{{ ds }}',
'ds_nodash': '{{ ds_nodash }}'
"""
}
现在,如果我在 .q 文件中调用这些项目,它将相应地读取和替换文本。
推荐阅读
- continuous-integration - 用于并行运行步骤的 GitHub Action 工作流程
- swift - 无法分配给属性:'myObject
' 是一个 'let' 常量 - 对于 MyProtocol 中 @optional 下的可空属性 - python - Python FastAPI 和 Laravel
- spring - @GeneratedValue 注释不适用于映射表
- python - 如何创建具有许多水平热图的图?
- string - 在scala中将字符串解析为伪树结构
- sql - 在数据阶段转换中获取给定字符之前的子字符串
- c - C 程序不等待用户使用 scanf() 输入
- image - RGBA 字节缓冲区中 R、G、B 和 A 排列的约定
- elasticsearch - JsonQueryElasticSearch 处理器生成流文件的问题