HIVEjdbc搭建
时间: 2018-09-12来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
1. 开启hive的远程连接 // 即使关闭当前会话但进程不会结束 nohup hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10010 &
2. 导入jar包 链接: https://pan.baidu.com/s/1iS36dT7ilWS5qbSiV7raHw 密码:u6fd 添加到java项目中
3. 代码详解 code import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class HiveUtil { private Statement statement = null; // HiveUtil实例化时会自动打开连接并导入自定义方法udf public HiveUtil() { open(); Init(); } // 初始化udf自定义方法包(当连接断开时,方法会自动失效),若有新的方法可在后面新增执行语句 private void Init() { try { statement.execute("add jar /home/bigdata/udf.jar"); statement.execute("create temporary function sub as 'com.yulang.udf.SubString'"); statement.execute("create temporary function jsonParse as 'com.yulang.udf.JsonParse'"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } static { try { // 1.加载驱动 Class.forName("org.apache.hive.jdbc.HiveDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void open() { try { // 2.打开连接 Connection connection = DriverManager.getConnection("jdbc:hive2://HADOOP01:10010/"); // 3.获得操作对象 - 会话 statement = connection.createStatement(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建数据库 - 用户注册时调用 * @param databaseName 根据用户标识生成的数据库名称 */ public void createDatabase(String databaseName) { try { statement.execute("create database " + databaseName); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 切换数据库 - 只对当前会话有效 * @param databaseName 目标数据库名称 */ public void changeDatabase(String databaseName) { try { statement.execute("use " + databaseName); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 获得当前数据库中的数据列表 - 注意切换数据库 * @return 数据表名称的集合 */ public List<String> getTaleList() { List<String> list = new ArrayList<>(); try { ResultSet rs = statement.executeQuery("show tables"); while (rs.next()) { list.add(rs.getString(1)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } /** * 获得数据表的简要信息 * @param tableName 数据表名称 * @return 列名及列的数据类型 */ public List<String> getTableInfo(String tableName){ List<String> list = new ArrayList<>(); try { ResultSet rs = statement.executeQuery("desc " + tableName); while (rs.next()) { list.add(rs.getString(1) + "\t" + rs.getString(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } /** * 获取数据表前十条的预览数据 * @param tableName 数据表名称 * @return 数据表预览数据 */ public List<String> getTableData(String tableName){ List<String> list = new ArrayList<>(); try { int size = getTableInfo(tableName).size(); ResultSet rs = statement.executeQuery("select * from " + tableName +" limit 10"); while (rs.next()) { String line = ""; for(int i = 1;i <= size;i ++) { line += rs.getString(i) + "\t"; } list.add(line); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } /** * 获得查询sql执行后的返回结果 * @param sql 用户自定义sql * @return sql执行结果集中的所有数据 */ public List<String> getResultData(String sql) { List<String> list = new ArrayList<>(); try { String tableName = "tmp_table"; sql = "create table " + tableName + " as " + sql; // 执行建表语句 statement.execute(sql); // 通过查询方法获取到新建表的数据 list = getTableData("tmp_table"); // 使用完临时表后drop临时表 statement.execute("drop table "+ tableName); } catch (SQLException e) { e.printStackTrace(); list = null; } return list; } }

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行