您的位置:首页 > 数据库 > Oracle

sqoop把oracle数据导入hive出现的问题

2018-03-21 18:01 423 查看
问题描述:

使用sqoop将oracle数据库的数据导入到hive中,一直提示“表或者视图不存在”,经检查,数据库,用户名,密码均无误,但是仍然无法导入

解决方案:
这个我第一次的import语句:
sqoop import --hive-import --connect
jdbc:oracle:thin:@192.168.1.1:1521:qxf
--username qxf --password qxf
--table test --hive-table raw.I_DEFINE
-m 1 --hive-overwrite --input-null-string '\\N'
--input-null-non-string '\\N' --null-string '\\N'
--null-non-string '\\N' --hive-drop-import-delims
--fields-terminated-by '\0001'

我在使用上述语句导入时,一直报错,一直百度未果,突然想到,
上述的只是我每次用于在oracle数据库提供的是ServerName的时候,而这次用户提供的是数据库的sid,
然后我百度了一下两者的区别,恍然大悟:
SERVICE_NAME指的是listener中的全局数据库名
sid 是数据库服务本身的一个实例区分而已

所以我应该这么写:
sqoop import --hive-import --connect
jdbc:oracle:thin:@192.168.1.1:1521:qxf
--username qxf --password qxf
--table qxf.test --hive-table raw.I_DEFINE
-m 1 --hive-overwrite --input-null-string '\\N'
--input-null-non-string '\\N' --null-string '\\N'
--null-non-string '\\N' --hive-drop-import-delims
--fields-terminated-by '\0001'

在table中加入数据库的数据库名称,因为我们是使用sid连接数据库的,
sqoop无法像通过servername一样扫描整个数据库,只有通过sid才可以去查找数据库信息,
但是如果没有指定数据库名称,那么就会出现问题,
提示“表或者视图不存在”,这就是我今天为什么导入一直报错的原因


除此之外,我还发现了一个问题,在我们使用java写连接oracle数据库的url时,一般会这样写:

通过sid连接:
jdbc:oracle:thin:@localhost:1521:orcl
通过servername连接:
jdbc:oracle:thin:@//localhost:1521/orcl.city.com


但是,问题来了!!!

为什么客户提供了ServerName,我却同样可以使用sid的连接的方式写url去import数据?而且还成功了?

难道客户的servername和sid是相同的吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: