我们有一个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
最好情况下,这是不得已的解决方法,如果应用程序尝试更新视图,则可能不起作用。
值得一试。