1、引包
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.7</version> </dependency>
注意:jar包的版本冲突
2、nacos添加配置信息
hive: name: hive url: jdbc:hive2://10.36.29.34:10000/ods type: com.alibaba.druid.pool.DruidDataSource username: elco password: elco driver-class-name: org.apache.hive.jdbc.HiveDriver initialSize: 3 minIdle: 1 maxActive: 20 maxWait: 600000000 timeBetweenEvictionRunsMillis: 600000000 minEvictableIdleTimeMillis: 30000 validationQuery: select 1 testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: 200000000 filters: stat
3.编写配置加载类
package com.elco.entity; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component @Data public class JdbcConfig { private String url; private String username; private String password; private String driverClassName; public String getDriverClassName() { return driverClassName; } @Value("${hive.driver-class-name}") public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUrl() { return url; } @Value("${hive.url}") public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } @Value ( "${hive.username}" ) public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } @Value ( "${hive.password}" ) public void setPassword(String password) { this.password = password; } }
4、编写hive工具类
package com.elco.utils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.elco.entity.JdbcConfig; import java.sql.*; public class HiveJDBCUtil { public static synchronized Connection getConn( JdbcConfig jdbcConfig) { String driverClassName =jdbcConfig.getDriverClassName(); String url =jdbcConfig.getUrl(); String username =jdbcConfig.getUsername(); String password =jdbcConfig.getPassword(); Connection connection = null; try { Class.forName(driverClassName); //执行驱动 connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return connection; } /** * 查询接口 * @param sql * @return */ public static JSONArray selectHive( String sql, JdbcConfig jdbcConfig) { Connection conn1 = getConn( jdbcConfig); //连接 PreparedStatement pstmt = null; //使用预编译语句 ResultSet rs = null; //获得结果集 JSONArray jsonArray = new JSONArray(); try { pstmt = conn1.prepareStatement(sql); rs = pstmt.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int in = metaData.getColumnCount(); JSONObject jsonObject; while (rs.next()) { jsonObject = new JSONObject(); for (int x = 1; x <= in; x ) { jsonObject.put(metaData.getColumnName(x), rs.getString(metaData.getColumnName(x))); } jsonArray.add(jsonObject); } } catch (Exception e) { throw new RuntimeException(e); } finally { //关闭资源,倒关 try { if (rs != null) rs.close(); if (pstmt != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn1 != null) conn1.close(); ///必须关闭 } catch (Exception e) { } } return jsonArray; } }
5、接口调用
JSONArray dataArray = HiveJDBCUtil.selectHive(sql.toString(), jdbcConfig);