当表包含SQL Server上的点时,生成错误的FROM子句导致Sqoop无效的对象名称错误

时间:2015-12-02 16:52:50

标签: sql-server hadoop jdbc sqoop

我必须在Hadoop上使用Sqoop和现有的MSSQL数据库结构。

所有权限似乎都没问题。使用SQL Studio的授权用户john,正确的工作查询将如下所示:

SELECT TOP 1000 [ksttyp_id]
      ,[orgunit_nr]
      ,[ksttyp_nr]
      ,[bezeichnung]
  FROM [egec01_t].[integris].[kst_typ]

我运行此导入命令:

sqoop import --connect "jdbc:sqlserver://example.com;username=john;password=1234;database=egec01_t" --table "integris.kst_typ" --target-dir /home/sqoop/ -as-textfile

预期的FROM子句是:

FROM [egec01_t].[integris].[kst_typ]

相反,我得到:

Executing SQL statement: SELECT t.* FROM [integris.kst_typ] AS t WHERE 1=0

ERROR manager.SqlManager:执行语句时出错:com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称'integris.kst_typ'。

我不确定这是与Sqoop有关还是与SqlManager或CodeGenTool有关?

我尝试了一般查询来列出所有数据库:

sqoop list-databases...

同样的问题:

ERROR manager.CatalogQueryManager:无法列出数据库 com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称'SYS.DAT ...

在底线,似乎是使用点而不是例如点的问题。强调: sqoop unable to import table with dot

但不幸的是,我被迫使用现有的结构。

我发布了一个问题,但尚未得到回复: https://issues.apache.org/jira/browse/SQOOP-2706

可能相关的问题: https://issues.apache.org/jira/browse/SQOOP-476

是否有解决方案可能会逃避表名?

1 个答案:

答案 0 :(得分:0)

你试过吗

--table "egec01_t.integris.kst_typ"