13、java api访问hive操作示例

Apache Hive 系列文章

1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解
2、hive相关概念详解–架构、读写文件机制、数据存储
3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表
4、hive的使用示例详解-事务表、视图、物化视图、DDL(数据库、表以及分区)管理详细操作
5、hive的load、insert、事务表使用详解及示例
6、hive的select(GROUP BY、ORDER BY、CLUSTER BY、SORT BY、LIMIT、union、CTE)、join使用详解及示例
7、hive shell客户端与属性配置、内置运算符、函数(内置运算符与自定义UDF运算符)
8、hive的关系运算、逻辑预算、数学运算、数值运算、日期函数、条件函数和字符串函数的语法与使用示例详解
9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解
10、hive综合示例:数据多分隔符(正则RegexSerDe)、url解析、行列转换常用函数(case when、union、concat和explode)详细使用示例
11、hive综合应用示例:json解析、窗口函数应用(连续登录、级联累加、topN)、拉链表应用
12、Hive优化-文件存储格式和压缩格式优化与job执行优化(执行计划、MR属性、join、优化器、谓词下推和数据倾斜优化)详细介绍及示例
13、java api访问hive操作示例



本文仅仅介绍通过java api访问hive的数据。
本文依赖hive环境可用,特别是HiveServer2。
本文比较简单,仅仅为示例。

一、pom.xml

		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>3.1.2</version>
		</dependency>

二、java 类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;

/**
 * JDBC 操作 Hive
 *
 */
@Slf4j
public class App {

	private static String driverName = "org.apache.hive.jdbc.HiveDriver";
	private static String url = "jdbc:hive2://server4:10000/default";// default 是默認數據庫名稱
	private static String user = "alanchan";// hadoop中可以訪問hdfs的用戶
	private static String password = "123456";// 該用戶的密碼

	private static Connection conn = null;
	private static Statement stmt = null;
	private static ResultSet rs = null;

	@Before
	public void init() throws Exception {
		Class.forName(driverName);
		conn = DriverManager.getConnection(url, user, password);
		stmt = conn.createStatement();
	}

	// 创建数据库
	@Test
	public void createDatabase() throws Exception {
		String sql = "create database test";
		log.info("sql:{}", sql);
		stmt.execute(sql);
	}

	// 查询所有数据库
	@Test
	public void showDatabases() throws Exception {
		String sql = "show databases";
		log.info("sql:{}", sql);
		rs = stmt.executeQuery(sql);
		while (rs.next()) {
			System.out.println(rs.getString(1));
		}
	}

	// 创建表
	@Test
	public void createTable() throws Exception {
		String sql = "create table test (id int ,name string) row format delimited fields terminated by  '\\t' ";
		log.info("sql:{}", sql);
		stmt.execute(sql);
	}

	// 查询所有表
	@Test
	public void showTables() throws Exception {
		String sql = "show tables";
		log.info("sql:{}", sql);
		rs = stmt.executeQuery(sql);
		while (rs.next()) {
			System.out.println(rs.getString(1));
		}
	}

	// 查看表结构
	@Test
	public void descTable() throws Exception {
		String sql = "desc emp";
		log.info("sql:{}", sql);
		rs = stmt.executeQuery(sql);
		while (rs.next()) {
			System.out.println(rs.getString(1) + "\t" + rs.getString(2));
		}
	}

	// 加载数据
	@Test
	public void loadData() throws Exception {
		String filePath = "/home/hadoop/data/emp.txt";
		String sql = "load data local inpath '" + filePath + "' overwrite into table test";
		log.info("sql:{}", sql);
		stmt.execute(sql);
	}

	// 查询数据
	@Test
	public void selectData() throws Exception {
		String sql = "select * from test";
		log.info("sql:{}", sql);
		rs = stmt.executeQuery(sql);

		while (rs.next()) {
			System.out.println(rs.getInt("id") + "\t\t" + rs.getString("name"));
		}
	}

	// 统计查询(会运行mapreduce作业)
	@Test
	public void countData() throws Exception {
		String sql = "select count(1) from test";
		log.info("sql:{}", sql);
		rs = stmt.executeQuery(sql);
		while (rs.next()) {
			System.out.println(rs.getInt(1));
		}
	}

	// 删除数据库
	@Test
	public void dropDatabase() throws Exception {
		String sql = "drop database if exists test";
		log.info("sql:{}", sql);
		stmt.execute(sql);
	}

	// 删除数据库表
	@Test
	public void deopTable() throws Exception {
		String sql = "drop table if exists test";
		log.info("sql:{}", sql);
		stmt.execute(sql);
	}

	// 释放资源
	@After
	public void destory() throws Exception {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (conn != null) {
			conn.close();
		}
	}

}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一瓢一瓢的饮 alanchanchn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值