sqoop导入数据到hive

sqoop to import data to hive

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

代码:

sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx --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'.

我做错了什么?

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

如果是这种情况,你能试试下面提到的语法吗?

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

以下观察基于 Sqoop 1.4.6

您在 table 名称中使用了 .(点)。

在内部,Sqoop 将触发命令

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

获取您的 SQL 服务器 table 的元数据。

此命令被解释为

  • xxxx - 计划名称
  • 通知 - Table 姓名

为避免这种情况,您可以使用转义字符([ ] 在 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 将被视为 table 名称。

嗨,在做了一些研究并与@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 命令在配置单元中创建 table。我在这里创建了名为 NOTIFICATION.

的配置单元 table