sqoop 将数据导入hive
Posted
技术标签:
【中文标题】sqoop 将数据导入hive【英文标题】:sqoop to import data to hive 【发布时间】:2016-08-25 09:58:33 【问题描述】:我正在尝试使用 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:无效的对象名称“XXXX.NOTIFICATION”。
我做错了什么?
【问题讨论】:
【参考方案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
将被视为表名。
【讨论】:
xxxx.NOTIFICATION 是我的表名,我尝试在命令中使用--query
,然后它就可以工作了。我不知道这里有什么问题
$ sqoop import --connect "jdbc:sqlserver://192.168.x.xxx:11xx;database=SSSS;username=user ;password=user " --query "SELECT * FROM XXXX.NOTIFICATION where \$CONDITIONS" --target-dir /user/cloudera/xxxxx -m 1
我试过了,我得到了ERROR manager.SqlManager: Error executing statement: com.microsoft.sqlserver.jdbc.SQLServerException: Unclosed quotation mark after the character string '[XXXX.NOTIFICATION] AS t WHERE 1=0'.
@animal 尝试我的查询将--verbose
放在命令的末尾。分享完整的错误日志
好的,我会分享,但在我的--query
中我使用的是数据库名称,但在你的中我没有看到它【参考方案2】:
您好,经过一番研究并与@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
的配置单元表。
【讨论】:
【参考方案3】:我假设表名是 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
【讨论】:
没有表名是xxxx.NOTIFICATION
不是NOTIFICATION
@animal 你试过这个吗? sqoop import --connect 'jdbc:sqlserver://192.168.x.xxx:11xx;databaseName=SSSS' --username user --password user --table xxxx\.NOTIFICATION --hive-import
是的,我用过它,我得到了ERROR manager.SqlManager: Error executing statement: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'xxxx.NOTIFICATION'.
以上是关于sqoop 将数据导入hive的主要内容,如果未能解决你的问题,请参考以下文章
使用 sqoop 将mysql数据导入到hive(import)