
# 配置Hive读取关系型数据库
#### 操作场景
Hive支持创建与其他关系型数据库关联的外表。该外表可以从关联到的关系型数据库中读取数据，并与Hive的其他表进行Join操作。
目前支持使用Hive读取DB2和Oracle两种关系型数据库的数据。
#### 前提条件
已安装Hive客户端。下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
#### 操作步骤
1. 以Hive客户端安装用户登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   ```
   cd 客户端安装目录
   ```
   例如安装目录为"/opt/client"，则执行以下命令：
   ```
   cd /opt/client
   ```
   
   
3. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
4. 集群是否启用了Kerberos认证。 
   - 是，执行以下命令进行用户认证：
     ```
     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客户端创建关联关系型数据库的外表。以下为关联Oracle linux6版本示例： 
   1. 登录Hive客户端：
      ```
      beeline
      ```
      
   
   2. 如果集群已启用Kerberos认证（安全模式），创建Hive表的用户需要"ADMIN"权限，并设置**admin** 权限：
      ```
      set role admin;
      ```
      
   
   3. 添加连接关系型数据库的驱动Jar包，不同数据库有不同的驱动Jar，且Jar包所在路径请以实际路径为准：
      ```
      ADD JAR hdfs:///tmp/ojdbc6.jar;
      ```
      
   
   4. 执行以下命令创建Hive表，且表的列需比数据库返回结果多一列用于分页查询：
      ```
      CREATE EXTERNAL TABLE ora_test
      (id STRING,rownum string)
      STORED BY 'com.qubitproducts.hive.storage.jdbc.JdbcStorageHandler'
      TBLPROPERTIES (
      "qubit.sql.database.type" = "ORACLE",
      "qubit.sql.jdbc.url" = "jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb",
      "qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver",
      "qubit.sql.query" = "select name from aaa",
      "qubit.sql.column.mapping" = "id=name",
      "qubit.sql.dbcp.username" = "test",
      "qubit.sql.dbcp.password" = "xxx");
      ```
      表1创建Hive表参数说明 
      | 参数                       | 参数说明                                                                                                  |
      |:---|:---|
      | qubit.sql.database.type  | 用于设置关联的关系型数据库类型，例如"ORACLE"。                                                                           |
      | qubit.sql.jdbc.url       | 通过JDBC连接关系型数据库的URL，不同数据库有不同的URL格式，例如"jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb"。                   |
      | qubit.sql.jdbc.driver    | 用于配置关系型数据库驱动类名，例如"oracle.jdbc.OracleDriver"。                                                          |
      | qubit.sql.query          | 在关系型数据库中执行的查询SQL语句，结果将返回至Hive表中。                                                                      |
      | qubit.sql.column.mapping | 可选，Hive表的列与关系型数据库表的列进行匹配。                                                                             |
      | qubit.sql.dbcp.username  | 连接关系型数据库的用户名。                                                                                         |
      | qubit.sql.dbcp.password  | 连接关系型数据库的用户密码。 命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的history命令记录功能，避免信息泄露。 |
         
      
   
   
   
   
 
