Hive教程(08)- JDBC操作Hive

简介: Hive教程(08)- JDBC操作Hive

01 引言

本文的代码已上传至GitHub,有兴趣的同学可以参阅:https://github.com/ylw-github/java-hive-demo


在前面的教程,已经初步入门hive了,有兴趣的同学可以参阅:

程序员最终还是要回归到代码的,所以接下来主要讲解使用jdbc来操作hive

02 开发前准备

2.1 步骤1:环境启动

阅读过前面几篇博客的,可以直接跳过

开发前需要先启动hadoop以及hiveserver,同时也要设置hive的用户名和密码,具体的操作可以参考:《Hive教程(07)- Hive自定义用户名密码验证(已开源)》

2.2 步骤2:创建数据库

使用beeline登录:

beeline
!connect jdbc:hive2://localhost:10001

执行创建数据库语句:

create database if not exists company_db;
use company_db;

DBeaver也能看到company_db创建成功:

备注:如果是mac系统,安装DBeaver的教程可以参考之前写的博客《Mac下安装DBeaver》

03 项目搭建

3.1 步骤1:新建maven项目

IDEA新建java-hive-demo项目,配置pom.xml内容如下(其实就只添加了hive-jdbc依赖):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ylw</groupId>
    <artifactId>java-hive-demo</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <developers>
        <developer>
            <name>Yang Lin Wei</name>
            <url>https://yanglinwei.blog.csdn.net/</url>
        </developer>
    </developers>
    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.3.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.jetty.aggregate</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

3.2 步骤2:创建hive连接工具类

首先定义常量(Const.java):

package com.ylw.constant;
/**
 * 常量定义
 *
 * @author : YangLinWei
 * @createTime: 2022/2/23 9:23 上午
 */
public interface Const {
    /*** hive服务器地址 **/
    String HIVE_DB_URL = "jdbc:hive2://127.0.0.1:10001/company_db";
    /*** hive登录账号 **/
    String USER_NAME = "root";
    /*** hive登录密码 **/
    String PASSWORD = "123";
}

然后定义hive连接工具类:

package com.ylw.util;
import com.ylw.constant.Const;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 * Hive连接工具类
 *
 * @author : YangLinWei
 * @createTime: 2022/2/23 9:22 上午
 */
public class HiveConnect {
    private static Connection connection = null;
    /**
     * 获取hive连接单例
     *
     * @return hive连接单例
     */
    public static Connection getConnection() {
        if (null == connection) {
            synchronized (HiveConnect.class) {
                if (null == connection) {
                    try {
                        Class.forName("org.apache.hive.jdbc.HiveDriver");
                        HiveConnect.connection = DriverManager.getConnection(Const.HIVE_DB_URL, Const.USER_NAME, Const.PASSWORD);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return connection;
    }
}

ok,项目基本搭建完成了,现在可以做jdbc的测试了。

04 Hive单元测试

单元测试工具类在HiveTest.java

4.1 创建表

先贴出创建表的方法:

public static boolean createEmployeeTable() throws SQLException {
        String sql = "CREATE TABLE IF NOT EXISTS " +
                "employee(name string," +
                "work_place array<string>," +
                "sex_age struct<sex:string, age:int>," +
                "score map<string, int>," +
                "depart_title map<string, string>) " +
                "row format delimited " +
                "fields terminated by '|' " +
                "collection items terminated by ',' " +
                "map keys terminated by ':'" +
                "lines terminated by '\n' " +
                "stored as textfile";
        Statement statement = HiveConnect.getConnection().createStatement();
        return statement.execute(sql);
}

执行完成后,在Dbeaver可以看到建表成功:

4.2 导入数据

本地新建数据employee.txt文件,内容如下:

Michael|Montreal,Toronto|Male,30|DB:80|Product:Developer
Will|Montreal|Male,35|Perl:85|Product:Lead,Test:Lead
Shelley|New York|Female,27|Python:80|Test:Lead,COE:Architect
Lucy|Vancouver|Female,57|Sales:89,HR:94|Sales:Lead

执行导入代码:

public static boolean loadData() throws SQLException {
     String loadSql = "load data local inpath '本地路径/employ.txt' into table employee";
     Statement statement = HiveConnect.getConnection().createStatement();
     return statement.execute(loadSql);
 }

DBeaver可以看到导入成功:

4.3 查看数据

执行sql查询,代码如下:

public static void query() throws SQLException {
    String sql = "select name ,work_place[0] from employee";
    PreparedStatement pstm = HiveConnect.getConnection().prepareStatement(sql);
    ResultSet rs = pstm.executeQuery(sql);
    while (rs.next()) {
        System.out.println(rs.getString(1) + "  " + rs.getString(2));
    }
    pstm.close();
    rs.close();
}

可以看到控制台有数据打印:

05 文末

本文的代码已上传至GitHub,有兴趣的同学可以参阅:https://github.com/ylw-github/java-hive-demo,本文完!

目录
相关文章
|
1月前
|
SQL DataWorks Java
DataWorks常见问题之hive jdbc加载数据错误如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
33 0
|
3月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
146 0
|
3月前
|
Java 数据库 数据安全/隐私保护
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
|
5月前
|
SQL 分布式计算 Java
Hive教程(07)- Hive自定义用户名密码验证(已开源)
Hive教程(07)- Hive自定义用户名密码验证(已开源)
140 0
|
5月前
|
SQL 分布式计算 Shell
Hive教程(05)- Hive命令汇总(上)
Hive教程(05)- Hive命令汇总(上)
119 0
|
4月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
102 0
|
10天前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
21 0
|
5月前
|
SQL 存储 Java
Hive教程(09)- 彻底解决小文件的问题
Hive教程(09)- 彻底解决小文件的问题
249 0
|
3月前
|
SQL 数据库 HIVE
python链接hive数据库实现增删改查操作
python链接hive数据库实现增删改查操作
139 0
|
5月前
|
SQL 存储 API
Flink教程(25)- Flink高级特性(FlinkSQL整合Hive)
Flink教程(25)- Flink高级特性(FlinkSQL整合Hive)
275 0