繁体   English   中英

squeoop导入数据到配置单元

[英]sqoop to import data to hive

我正在尝试使用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'。

我究竟做错了什么?

以下观察结果基于Sqoop 1.4.6

您正在使用 表格名称中的(点)。

在内部,Sqoop将触发命令

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

来获取您的SQL Server表的元数据。

此命令解释为

  • xxxx-schame名称
  • 通知-表名

为避免这种情况,您可以使用转义符( 对于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将被视为表名。

嗨,在做了一些研究并与@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配置单元表。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM