天天看点

hive读取关系型数据库数据

以oracle作为数据源

在oracle中建测试表并插入数据:

create table tmp.tmp
(
id varchar2(10),
name varchar2(20)
);

insert into tmp.tmp values('1','zhang');
commit;
           

在本地oracle客户端安装目录找到...\jdbc\lib\ojdbc6.jar,将此jar包加载到hdfs中:

hadoop fs -put ojdbc6.jar /tmp/
//赋权
hadoop fs -chmod 777 /tmp/ojdbc6.jar
           

登录hive cli,加载jar包:

add jar hdfs:///tmp/ojdbc6.jar
           

在hive中新建外部表,读取oracle表的数据:

CREATE EXTERNAL TABLE oracle_tmp
--hive表需比oracle表多一列,用来排序
(id STRING,name string,rownum string)
--序列化方式
STORED BY 'com.qubitproducts.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
--关系型数据库类型
"qubit.sql.database.type" = "ORACLE",
--通过JDBC连接关系型数据库的url(不同数据库有不同的url格式)
"qubit.sql.jdbc.url" = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl",
--关系型数据库驱动类名
"qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver",
--在关系型数据库查询的sql语句,结果将返回hive表
"qubit.sql.query" = "select id,name from tmp",
--hive表的列与关系型数据库表的列进行匹配(可忽略)
"qubit.sql.column.mapping" = "id=id,name=name",
--关系型数据库用户
"qubit.sql.dbcp.username" = "tmp",
--关系型数据库密码
"qubit.sql.dbcp.password" = "tmp");
           

读取hive外部表数据结果如下:

hive读取关系型数据库数据

至此hive能通过外部表读取oracle数据了。

在记录该方法时,测试环境hive仅支持DB2和oracle两个关系型数据库。