当前位置:   article > 正文

Hive教程(08)- JDBC操作Hive_hive jdbc

hive jdbc

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
  • 1
  • 2

执行创建数据库语句:

create database if not exists company_db;
use company_db;
  • 1
  • 2

在这里插入图片描述

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

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";
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

然后定义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;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

执行完成后,在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
  • 1
  • 2
  • 3
  • 4

执行导入代码:

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);
 }
  • 1
  • 2
  • 3
  • 4
  • 5

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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

可以看到控制台有数据打印:
在这里插入图片描述

05 文末

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/747902
推荐阅读
相关标签
  

闽ICP备14008679号