sqoop将数据导入配置单元

cqoc49vn  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(521)

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

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

错误:
error manager.sqlmanager:执行语句时出错:com.microsoft.sqlserver.jdbc.sqlserverexception:对象名“x.notification”无效。
我做错什么了?

dfty9e19

dfty9e191#

嗨,在与@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 命令。在这里,我创建了一个名为 NOTIFICATION .

33qvvth1

33qvvth12#

我假设表名是notification,您在编写--table x.notification时试图提到数据库名x
如果是这样的话,你能试试下面提到的语法吗?

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

zysjyyx43#

以下观察结果基于sqoop1.4.6

您正在使用(点)在您的表名中。
在内部,sqoop将触发命令

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

获取sql server表的元数据。
此命令被解释为
x-名称
通知-表名
为了避免这种情况,您可以使用转义字符([]对于sql server): sqoop import --connect jdbc:sqlserver://192.168.x.:11xx --username user --password user --table [x.NOTIFICATION] --hive-import 这将产生

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

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

相关问题