0

我正在尝试使用 sqoop2 将数据导入配置单元表。我正在使用--hive-import,但它不工作

代码:

sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx --username user --password user --table xxxx.NOTIFICATION --hive-import

错误:

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

我究竟做错了什么?

4

3 回答 3

1

以下观察基于 Sqoop 1.4.6

你正在使用. (点)在您的表名中。

在内部,Sqoop 将触发命令

SELECT t.* FROM xxxx.NOTIFICATION AS t WHERE 1=0

获取 SQL Server 表的元数据。

该命令被解释为

  • xxxx - 恶名
  • 通知 - 表名

为避免这种情况,您可以使用转义字符(在 SQL Server 的情况下为[ ]):

sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx --username user --password user --table [xxxx.NOTIFICATION] --hive-import

这将产生

SELECT t.* FROM [xxxx.NOTIFICATION] AS t WHERE 1=0

现在xxxx.NOTIFICATION将被视为表名。

于 2016-08-25T10:15:40.867 回答
1

嗨,经过一番研究并与@dev 讨论了这个问题后,我找到了解决方案。

我正在使用 sqoop2,所以我更改了命令并使用了以下命令,它对我有用。

$ sqoop import --connect "jdbc:sqlserver://192.168.x.xxx:11xx;database=SSSS;username=user;password=user" --query "SELECT * FROM xxxx.NOTIFICATION where \$CONDITIONS" --split-by xxxx.NOTIFICATION.ID --hive-import --hive-table NOTIFICATION  --target-dir NOTIFICATION 

create在执行此命令之前,我们应该使用命令在 hive 中创建表。在这里,我创建了名为NOTIFICATION.

于 2016-08-25T14:41:55.330 回答
0

我假设表名是 NOTIFICATION 并且您在编写 --table xxxx.NOTIFICATION 时试图提及数据库名称 xxxx

如果是这种情况,您可以尝试下面提到的语法吗?

sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx;databaseName=xxxx --username user --password user --table NOTIFICATION --hive-import
于 2016-08-25T10:08:12.167 回答