Hive的基本操作有哪些
发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,小编给大家分享一下Hive的基本操作有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:首先,配置好连接Hive的Pr
千家信息网最后更新 2025年01月26日Hive的基本操作有哪些
小编给大家分享一下Hive的基本操作有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一:首先,配置好连接Hive的Properties,创建hivedb.properties 如下:
driver=org.apache.hive.jdbc.HiveDriverurl=jdbc:hive2://master:10000/defaultuser=hivepassword=xujun
二:创建HiveProperties,继承自Properties,读取hivedb.properties(单例)
public class HiveProperties extends Properties { /** * @author Berg * 读取hivedb.properties */ private static final long serialVersionUID = 1L; private static HiveProperties hiveProperties; private HiveProperties(){ InputStream iis = HiveProperties.class.getClassLoader().getResourceAsStream("hivedb.properties"); try{ super.load( iis ); }catch(IOException e ){ e.printStackTrace(); } } public static HiveProperties getInstance(){ if( hiveProperties == null){ hiveProperties = new HiveProperties(); } return hiveProperties; }}
三:创建HiveUtil,对Hive中的基本操作进行简单封装:
注意:导入数据的时候,可以从本地文件导入数据,也可以从HDFS上导入数据,
区别是:如果导入的是HDFS数据,则不需要local关键字
public class HiveUtil { //读取一次驱动 静态块 static{ try { Class.forName(HiveProperties.getInstance().getProperty("driver")); }catch(ClassNotFoundException e){ e.printStackTrace(); //输出至标准错误流。 } } //获取HiveConnection public Connection getConn() throws SQLException{ HiveProperties hp = HiveProperties.getInstance(); Connection conn = DriverManager.getConnection(hp.getProperty("url"), hp.getProperty("user"), hp.getProperty("password") ); return conn; } //创建表: public boolean createTable(Statement statement,String sql) throws SQLException{ /** * 如果第一个结果为 ResultSet 对象,则返回 true * 如果其为更新计数或者不存在任何结果,则返回 false * 因为 create 语法不属于DML, 所以执行create sql语句后将返回false。 * 看起来还是有点缺陷。 */ boolean result = statement.execute(sql); if( !result ){ return true; }else{ return false; } } //判断表是否存在 public boolean tableIsExists(Statement statement, String tableName) throws SQLException{ String sql = "show tables '" + tableName + "'"; ResultSet rs = statement.executeQuery(sql); if (rs.next()) { return true; }else{ return false; } } //删除某张表: public boolean dropTable(Statement statement,String tableName) throws SQLException { String sql = "drop table " + tableName; boolean result = statement.execute(sql); if( !result ){ return true; }else{ return false; } } //显示某张表或显示所有的表 public ResultSet showTables(Statement statement, String tableName) throws SQLException{ String sql = ""; if(tableName==null||tableName.equals(null)){ sql = "show tables"; }else{ sql = "show tables '" + tableName + "'"; } ResultSet rs = statement.executeQuery(sql); return rs; } //对表的描述: public ResultSet describeTable(Statement statement, String tableName) throws SQLException { String sql = "describe " + tableName; ResultSet rs = statement.executeQuery(sql); return rs; } /** *通过文件方式,将文件中数据插入到表中:加载本地本剑数据。 * @throws SQLException * @filePath: 文件路径, 比如: /home/hadoop/mytestdata/hive.txt * 注意此路径在虚拟机下。。。 * */ //通过文件方式,将文件中数据插入到表中:加载本地本剑数据。 public boolean loadDataFromLocal(Statement statement, String tableName,String filePath) throws SQLException { String sql = "load data local inpath '" + filePath + "' into table " + tableName; boolean result = statement.execute(sql); if( !result ){ return true; }else{ return false; } } //通过文件方式,将文件中数据插入到表中:加载本地本剑数据。 public boolean loadDataFromHDFS(Statement statement, String tableName,String filePath) throws SQLException { String sql = "load data inpath '" + filePath + "' into table " + tableName; boolean result = statement.execute(sql); if( !result ){ return true; }else{ return false; } } //查询表中的数据: public ResultSet selectData(Statement statement, String tableName) throws SQLException { String sql = "select * from " + tableName; ResultSet rs = statement.executeQuery(sql); return rs; } //统计表中数据: public ResultSet countData(Statement statement, String sql) throws SQLException{ ResultSet rs = statement.executeQuery(sql); return rs; } //关闭连接: public void close(Connection conn,Statement statement) throws SQLException{ if (conn != null) { conn.close(); conn = null; } if (statement != null) { statement.close(); statement = null; } }}
四:对基本操作的测试,如下创建TestMain:
public class TestMain { private HiveUtil hu = new HiveUtil(); private Connection conn = null; private Statement statement; //1.测试连接 @Test public void testConn() throws SQLException{ conn = hu.getConn(); System.out.println( "获取连接为: "+ conn ); } //2.创建表: @Test public void testCreateTable() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; String sql = "create table " + tableName + " (key int, value string) row format delimited fields terminated by '\t'"; boolean result = hu.createTable(statement, sql); if( result ){ System.out.println( "创建表成功。" + result ); }else{ System.out.println( "创建表失败。" + result ); } } //3.判断表是否存在 @Test public void testTableIsExists() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; boolean result = hu.tableIsExists(statement, tableName); if(result){ System.out.println( "表已经存在。" ); }else{ System.out.println( "表不存在,请新建表。"); } } //4.删除表:删除表之前先判断表是否存在。 @Test public void testDropTable() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; boolean result = hu.tableIsExists(statement, tableName); if(result){ System.out.println( "表已经存在,开始删除这张表: " ); result = hu.dropTable(statement, tableName); if( result ){ System.out.println( "删除表成功。"); }else{ System.out.println( "删除表失败。"); } }else{ System.out.println( "表不存在,请新建表。"); } } //5.显示所有的表 @Test public void testShowTables() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; ResultSet rs = hu.showTables(statement, tableName); while( rs.next() ){ System.out.println( "表名为: "+ rs.getString(1)); } } //6.对表的描述 @Test public void testDescribeTable() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; //首先判断张表是否存在: boolean result = hu.tableIsExists(statement, tableName); if( result ){ //表示表已经存在: ResultSet rs = hu.describeTable(statement, tableName); while( rs.next() ){ System.out.println( rs.getString(1) ); } }else{ System.out.println( "Error: 表不存在,不能对表描述。"); } } //7.导入数据: local 和 hdfs @Test public void testLoadData() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; //String localFilePath = "/home/hadoop/mytestdata/hive.txt"; String hdfsFilePath = "hdfs://master:9000/user/hive/hive.txt"; //首先判断张表是否存在: boolean result = hu.tableIsExists(statement, tableName); if( result ){ //表示表已经存在: //加载导入本地数据 //result = hu.loadDataFromLocal(statement, tableName, localFilePath); //加载导入HDFS上文件数据 result = hu.loadDataFromHDFS(statement, tableName, hdfsFilePath); if( result ){ System.out.println( "成功将本地文件数据导入到表" + tableName + "中" ); }else{ System.out.println( " 导入失败 。"); } }else{ System.out.println( "Error: 表不存在,不能对表导入文件数据。"); } } //8.查询表中的数据: @Test public void testSelectData() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; //首先判断张表是否存在: boolean result = hu.tableIsExists(statement, tableName); if( result ){ //表示表已经存在: ResultSet rs = hu.selectData(statement, tableName); while( rs.next() ){ System.out.println( rs.getString(1) +"\t"+ rs.getString(2) ); } }else{ System.out.println( "Error: 表不存在,不能对表导入文件数据。"); } } //9.统计表中的数据: @Test public void testCountData() throws SQLException{ conn = hu.getConn(); statement = conn.createStatement(); String tableName = "testhive"; //首先判断张表是否存在: boolean result = hu.tableIsExists(statement, tableName); if( result ){ //表示表已经存在: String sql = "select count(1) from " + tableName; ResultSet rs = hu.countData(statement, sql); System.out.println( rs ); while( rs.next() ){ System.out.println( "当前记录数据量为: " + rs.getString(1) ); } }else{ System.out.println( "Error: 表不存在,不能统计数据。"); } } }
5.测试数据:(以Tab隔开。)
1 Berg1 Berg2 Cccc3 Xxxx4 Jjjj
当然 ,也可创建Maven 的依赖,我的如下:
pentaho-aggdesigner-algorithm
以上是"Hive的基本操作有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
数据
文件
基本操作
成功
方式
篇文章
测试
统计
内容
查询表
结果
统计表
路径
查询
不怎么
关键
关键字
大部分
对象
时候
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
街道上三大数据库
方舟物理机服务器怎么重启
数据库数据过多时怎么优化
安全web服务器哪里
软件开发专业实习工资
学习数据库的心得体会怎么写
西安网络安全博览会举办几天
博兴工具软件开发
网络安全法用户隐私条款
开启局域网服务器设置
mysql如何给数据库创建注释
软件开发专业详细描述
一台服务器两个网口不同网段通信
魔域单机版服务器连接错误怎么办
数据库报错1093
普天首信网络技术
网络安全基础小结
服务器安全防护 专家年薪
带显卡服务器可以玩游戏么
歌曲音译软件开发
铂金网络技术有限公司
杭州高校网络安全培训班
云数据库哪家性价比高
使命召唤16总连不上服务器
数据库怎么倒库
ibm服务器不能启动不了
服务器冗余电源接口
nc网络安全防护系统
天津卓朗科技工业互联网
读写分离双主双从复制表到数据库