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

Posted

技术标签:

【中文标题】SQL Server 上表包含点时生成错误的 FROM 子句导致 Sqoop 无效对象名称错误【英文标题】:Sqoop invalid object name error caused by wrong FROM clause generated when table includes dots on SQL Server 【发布时间】:2015-12-02 16:52:50 【问题描述】:

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

所有权限似乎都没问题。通过 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

错误 manager.SqlManager:错误执行语句:com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称“integris.kst_typ”。

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

我也尝试了一个通用查询来列出所有数据库:

sqoop list-databases...

同样的问题:

错误 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

是否有解决方案可以转义表名?

【问题讨论】:

感谢@Simone 编辑。我实际上不知道mysql 是如何被标记的。如何将sqoop 标记为主要标签? 【参考方案1】:

你试过了吗

--table "egec01_t.integris.kst_typ"

【讨论】:

FROM 子句中的格式相同问题 - 将解析 `[egec01_t.integris.kst_typ]`。 此异常是当sqoop在连接字符串中识别默认数据库更新database=egec*为databaseName=egec*时

以上是关于SQL Server 上表包含点时生成错误的 FROM 子句导致 Sqoop 无效对象名称错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL删除操作问题,3点时一个错误导致数据库资料完全混乱,那我想删除今天3点后的操作,需要啥语句?

SQL Server:如何在总行数和仅包含数据的行数之间得到差异

使用带有重复行和新列的 SQL Server 创建视图

生成只包含某些对象的 sql server 脚本?

SQL Server 中全文搜索的奇怪行为

SqlDependency/Query 通知 - SQL Server 重新启动