Контекст: Hive3, HDP 3.1.Тесты, выполненные с помощью Python / odbc (официальный драйвер HDP) в Windows и Linux.
Я выполнил следующие запросы:
- "выбрать? Как лицензию,? Как cpg"
- "выберите * из (выберите? Как лицензия,? Как cpg) как t"
- "с init как (выберите? Как лицензия,? Как cpg), выберите * из init",
1) и 2) работают нормально, и дают мне ожидаемый результат.3 дает мне ParseException:
Ошибка при компиляции оператора: FAILED: ParseException строка 1:21 не может распознать ввод около '?''as' 'lic' в операторе select (80) (SQLPrepare) ")
Точно такие же операторы, работающие с java / jdbc, работают нормально. Обратите внимание, что 2) выглядит как обходной путь для 3)но он работает для этого крошечного примера, а не для больших запросов.
Есть ли что-то, что я могу сделать, чтобы ODBC работал должным образом? Кроме того, где я могу найти ограничения драйвера ODBC?
Для полного контекста полный тестовый код выглядит следующим образом:
cnxnstr = 'DSN=HiveProd'
cnxn = pyodbc.connect(cnxnstr, autocommit=True)
cursor = cnxn.cursor()
queries = [
"with init as (select ? as lic, ? as cpg) select * from init",
"select 2 * ? as lic, ? as cpg",
"select * from (select ? as lic, ? as cpg) as t",
]
for q in queries:
print("\nExecuting " + q)
try:
cursor.execute(q, '1', '2')
except pyodbc.ProgrammingError as e:
print(e)
continue