Мне удалось наконец заставить это работать, хотя это может быть не самый красноречивый способ сделать это. Я пытался сделать отбрасывание таблиц как одну переменную «query5», но получал ошибку DDL. Как только я разделил каждую удаленную таблицу на ее собственный session.execute, он заработал.
udaExec = td.UdaExec(appConfigFile="udaexec.ini")
with udaExec.connect("${dataSourceName}") as session:
state_dataframes = []
STATES = ["state1", "state2", "state3", "state4", "state5"]
for state in STATES:
query1 = """database my_db_{};"""
query2 = """
create set volatile table v_table
,no fallback, no before journal, no after journal as
(
select top 10
'{}' as state
,t.*
from table t
)
with data
primary index (dw_key)
on commit preserve rows;
"""
query3 = """
create set volatile table v_table_2
,no fallback, no before journal, no after journal as
(
select t.*
from v_table t
)
with data
primary index (dw_key)
on commit preserve rows;
"""
query4 = """
select t.*
from v_table_2 t
"""
session.execute(query1.format(state))
session.execute(query2.format(state))
session.execute(query3)
state_dataframes.append(pd.read_sql(query4, session))
session.execute("DROP TABLE v_table")
session.execute("DROP TABLE v_table_2")
all_states_df = pd.concat(state_dataframes)
Правка для ясности: исправление запроса в вопросе требовало только правильного отступа. В моей среде Teradata у меня ограниченное пространство спулинга, что требует создания множества таблиц vol для разделения запросов. Поскольку я потратил много времени, пытаясь решить эту проблему, я добавил ответ, чтобы помочь другим, кто может столкнуться с этим сценарием.