我们有一个MSSQL DB设置,其列名称为“ Column 0”和“ Column 1”:请注意空格。

如果我运行以下命令,则会出错:

sqoop import --driver net.sourceforge.jtds.jdbc.Driver --connect jdbc:jtds:sqlserver://somemssqldb.com/OurDB --table dbo.OurTableName --username username --password ourPassword --columns“第0栏“ --target-dir s3:// our-s3-bucket / 9 / data / 1262/141893327230246 -m 1

堆栈跟踪报告:

错误:java.io.IOException:nextKeyValue中的SQLException
引起原因:java.sql.SQLException:'0'附近的语法不正确。

如果我们同时删除了数据库和命令中的列名称空间,那么它将起作用。

我们如何获得它以支持在--columns参数中使用空格?如果专门使用--query并进行转义,那么我们成功做到这一点的唯一方法。

例如,我们必须编写如下查询:

SELECT t。[第1栏]

最佳答案

从名称“ sqoop import”开始,听起来该工具仅用于阅读?

也许您可以尝试通过重命名表,然后创建一个与表同名的视图来使其混淆。在视图中,您可以为列加上别名而不使用空格。

EXEC SP_RENAME SourceTable, SourceTable_

CREATE VIEW SourceTable
AS

SELECT [Column 0] as Column0
FROM SourceTable_


您可以这样编写查询...

SELECT t.Column0
FROM SourceTable t


最好情况下,这是不得已的解决方法,如果应用程序尝试更新视图,则可能不起作用。

值得一试。

10-08 08:42