背景:Hive3,HDP 3.1。在Windows和Linux下使用python/odbc(官方HDP驱动程序)完成的测试。
我运行了以下查询:
-
“选择?作为LIC,?作为CpG“
-
“选择*从(选择?作为LIC,?作为CpG的“T”
-
“用init as(选择?作为LIC,?as cpg)选择*from init“,
1)和2)工作良好,并给我预期的结果。3给了我一个ParseException:
编译语句时出错:失败:ParseException行1:21
无法识别“?”附近的输入。作为select子句(80)中的“lic”
(Sql准备)
与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