【发布时间】:2014-09-01 14:58:10
【问题描述】:
我正在使用以下命令通过 Sqoop 从 Vertica 导入:
sqoop import --driver com.vertica.Driver --connect jdbc:vertica://[host]:[port]/[db] --username [username] --password [pass] -m 1 --table [table]
这会失败并出现以下错误:
14/09/01 15:12:21 INFO manager.SqlManager: Using default fetchSize of 1000
14/09/01 15:12:21 INFO tool.CodeGenTool: Beginning code generation
14/09/01 15:12:21 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [table] AS t WHERE 1=0
14/09/01 15:12:21 ERROR manager.SqlManager: Error executing statement: com.vertica.util.PSQLException: ERROR: cursor "C_2" already exists
com.vertica.util.PSQLException: ERROR: cursor "C_2" already exists
我尝试了各种 Sqoop 选项,并进行了多次谷歌搜索,但无法弄清楚为什么会出现此错误或如何解决它。
似乎 Vertica 确实对光标有一些限制,例如 stated here:
光标只能向前,不可滚动。结果集不能 更新。连接支持在任意位置执行单个语句 时间。如果要同时执行多个语句,打开 多个连接。因为 HP Vertica 没有存储 程序,不支持 CallableStatement。这 DatabaseMetaData.getProcedures() 和 .getProcedureColumns() 方法 返回有关 SQL 函数(包括 UDF)的信息,而不是 存储过程。
所以我目前最好的猜测是 Sqoop 使用光标打开的连接不止一个?但话又说回来,我只使用一个映射器,所以我不确定情况是否如此。
谁能给我更多关于我为什么会收到这个错误的信息,或者如何解决它?
还有其他不使用游标的连接管理器吗?
我正在使用 Vertica 5 和 Vertica JDBC 4。Sqoop 1.4.5。 list-tables 工作正常。使用--query 导入自定义查询时出现一些错误,所以我认为SQL 是正确的。我在export 上遇到同样的错误
【问题讨论】: