如何在hql文件中传递/读取hiveconfs变量

问题描述 投票:0回答:1

使用 hive 运算符并传递 hql 文件在气流中运行 hql 文件

hive_task = HiveOperator(
    task_id='run_hql',
    hql='/path/to/your_query.hql',
    hive_conn_id='your_hive_connection_id',
    hiveconf_jinja_translate=True,
    hiveconfs={'table_name': 'your_table_name', 'days': 5},
    dag=dag,
)

hql内容如下

-- Define parameters
SET hivevar:table_name=YOUR_DEFAULT_TABLE_NAME;
SET hivevar:days_offset=YOUR_DEFAULT_DAYS_OFFSET;

-- Use parameters in the query
SET days={{ macros.dateutil.relativedelta.relativedelta(days=-hivevar:days) | replace(":", "-") }};

ANALYZE TABLE edw_health.${hivevar:table_name} PARTITION(ds = '{{ days }}') COMPUTE STATISTICS;
ANALYZE TABLE edw_health.${hivevar:table_name} PARTITION(ds = '{{ days }}') COMPUTE STATISTICS FOR COLUMNS;

收到错误,因为“hiveconf”未定义。

任何人都可以建议我是否缺少某些内容以及如何读取 hql 文件中的 hive confs 变量值

hive airflow hive-configuration
1个回答
1
投票

您正在 Hive 脚本中使用

hivevar
命名空间:

 ${hivevar:table_name}

但是 hiveconf 在

hiveconf
命名空间中作为 key=value 传递。

参见hive_operator

使用 hiveconf 而不是 hivevar:

 ${hiveconf:table_name}
© www.soinside.com 2019 - 2024. All rights reserved.