【问题标题】:Pyodbc not detecting parameter marker in SQL statement (i.e. - Insert into table SELECT ...) to Hive table. Is there a workaround for this issue?Pyodbc 未检测 SQL 语句中的参数标记(即 - 插入表 SELECT ...)到 Hive 表。这个问题有解决方法吗?
【发布时间】:2021-06-24 20:03:12
【问题描述】:

我的目标是遍历一组值并使用它们运行一组查询,这些查询将使用 pyodbc 将它们的结果插入到 hive 表中。

我试过了

params = ['USA','JP']
set(params)

for i in params:
    cursor.execute(insert into table **some_db.some_tbl** SELECT name, country from **some_db.some_tbl_2** where country = ?,i)

得到了错误

以下并收到错误消息,ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were provided', 'HY000')。

如果我删除 insert into table some_db.some_tbl 部分,它工作正常。不知道还能做什么,因为所有文档和查看类似问题表明我所做的是正确的。

如果我保留 insert into table some_db.some_tbl 部分但删除参数化,它可以正常工作。

【问题讨论】:

  • 你在 some_db.some_tbl 中有多少列?你能像这样发出cursor.execute(insert into some_db.some_tbl(name, country ) SELECT name, country where country = ?,i)
  • some_db.some_tbl 有两列。我正在尝试使用 CTAS、ITAS 的变体(即 - 将表格插入为选择)。如果我省略参数化或插入,这实际上有效,只使用选择。因此,这两种技术似乎都受支持,但是当结合使用时,我得到了原始问题中的错误。
  • 我已经尝试了您建议的方法,但返回相同的错误。由于某种原因,当我使用“插入”时,参数标记未被识别。

标签: sql hadoop hive pyodbc impala


【解决方案1】:

我用一个简单的解决方法来回答这个问题,因为它可能会帮助其他人节省一些时间。

由于 'insert without parameterization''select with parameterization' 独立工作,我通过使用 select 语句遍历我的参数来解决这个问题,然后将结果保存到熊猫数据框。然后,您可以从那里对 pandas 数据帧运行插入,而无需为当前迭代进行参数化。所有这些都将在循环体中,因此分别考虑所有参数值。

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2013-11-19
    • 2019-06-19
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多