
# 配置Hive读取关系型数据库数据
#### 操作场景
Hive支持创建与其他关系型数据库关联的外表。该外表可以从关联到的关系型数据库中读取数据，并与Hive的其他表进行Join操作。
目前支持使用Hive读取数据的关系型数据库如下：
- DB2
- Oracle
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
本章节适用于MRS 3.x及后续版本。
#### 前提条件
已安装Hive客户端。
#### 操作步骤
1. 以Hive客户端安装用户登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   **cd** *客户端安装目录*
   例如安装目录为"/opt/client"，则执行以下命令：
   **cd /opt/client**
   
   
3. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
4. 集群认证模式是否为安全模式。 
   - 是，执行以下命令进行用户认证： **kinit** *Hive业务用户*
     
   
   - 否，执行[5]。
   
   
   
   
5. 执行以下命令，将需要关联的关系型数据库驱动Jar包上传到HDFS目录下。
   
   **hdfs dfs -put** *Jar包所在目录* *保存Jar包的HDFS目录*
   例如将"/opt"目录下ORACLE驱动Jar包上传到HDFS的"/tmp"目录下，则执行如下命令。
   **hdfs dfs -put /opt/ojdbc6.jar /tmp**
   
   
6. 按照如下示例，在Hive客户端创建关联关系型数据库的外表。 
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   如果是安全模式，建表的用户需要"ADMIN"权限，**ADD JAR** 的路径请以实际路径为准。
   ```
   -- 关联oracle linux6版本示例
   -- 如果是安全模式，设置admin权限 
   set role admin;
   -- 添加连接关系型数据库的驱动jar包,不同数据库有不同的驱动JAR
   ADD JAR hdfs:///tmp/ojdbc6.jar;
   CREATE EXTERNAL TABLE ora_test
   -- hive表的列需比数据库返回结果多一列用于分页查询
   (id 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:@//10.163.0.1:1521/mydb",
   -- 关系型数据库驱动类名
   "qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver",
   -- 在关系型数据库查询的sql语句,结果将返回hive表
   "qubit.sql.query" = "select name from aaa",
   -- hive表的列与关系型数据库表的列进行匹配（可忽略）
   "qubit.sql.column.mapping" = "id=name",
   -- 关系型数据库用户
   "qubit.sql.dbcp.username" = "test",
   -- 关系型数据库密码，命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的history命令记录功能，避免信息泄露。
   "qubit.sql.dbcp.password" = "xxx");
   ```
   
   
 
