У меня есть шаблон jinja, который я планирую использовать для динамической генерации SQL в Hive.Мой шаблон выглядит следующим образом:
USE {{ db }};
CREATE EXTERNAL TABLE IF NOT EXISTS foo (
A int,
B int
)
stored as parquet
location ‘….’;
«db» - это то, что может быть получено путем вызова функции.Я решил написать оператор расширения HiveExecOperator.В моей среде иерархия классов выглядит так:
BaseOperator <—— BaseExecOperator <- HiveExecOperator </p>
Мой оператор TestHive выглядит следующим образом:
class TestHive(HiveExecOperator):
def pre_execute(self, context):
context[‘db’] = func1(…,,)
return context['ti'].render_templates()
Этот оператор не работает как{{db}} внутри шаблона ничего не получает и оператор hive не выполняется.Я также попытался переопределить render_template в TestHive следующим образом:
class TestHive(HiveExecOperator):
def render_template(self, attr, content, context):
context['db'] = func1(..,)
return super(TestHive, self).render_templates(attr, content, context)
Этот сбой, поскольку родительский класс TestHive не имеет метода render_templates.
Method: render_templates" is only defined in BaseOperator.
Любая помощь приветствуется.