第十二天,
第十二天 - Hive基本操作 - Hive导入数据、统计数据 - HiveJDBC操作Hive
- 第十二天 - Hive基本操作 - Hive导入数据、统计数据 - HiveJDBC操作Hive
- 一、Hive基础知识补充
- 概念
- Hive基本操作(二)
- 二、Hive SQL操作案例一:统计dataflow.log文件中的流量数据
- 未指定分隔符
- 指定分隔符
- 三、Hive SQL操作案例二:
- 通过navicat将sql文件转为txt
- 将数据文件.txt导入到hive中
- 对库中的信息进行查询操作
- 四、HiveJDBC操作Hive
- 准备工作
- 编写代码
- 一、Hive基础知识补充
一、Hive基础知识补充
概念
- Hive可以通过HiveJDBC进行操作,方便应用的封装
- Hive有内置函数和语法,也可以编写自定义函数
- Hive的数据类型,大部分与java中一致,其中long在hive中为bigint
- 创建数据表时,需要和数据文件结构(数据类型、列数等)对应,特别是分隔符要正确
- Hive默认不支持update和delete语句,但是可以通过函数实现,insert语句执行较慢,一般采用导入文件数据进行导入
- Hive主要用于数据计算
Hive基本操作(二)
切换数据库
use {dbName};
删除数据库
drop database [if exists] {dbName} [cascade];
查看当前库的所有表
show tables [like ‘*’] [in database];
创建表
create database.table({col_name} {data_type},…)[row format delimited fields terminated by ‘\t’ lines terminated by ‘\n’ ];
[]中用于指定分隔符
增加字段
alter table {tableName} add columns (new_colName data_type);
查看表结构
desc {tableName};
重命名表名
alter table {tableName} rename to {newName};
删除表
drop table if exists {tableName};
导入数据
二、Hive SQL操作案例一:统计dataflow.log文件中的流量数据
未指定分隔符
指定分隔符
三、Hive SQL操作案例二:
通过navicat将sql文件转为txt
导入sql文件
将mysql中已有的数据导入到hive中
将数据文件.txt导入到hive中
对库中的信息进行查询操作
四、HiveJDBC操作Hive
准备工作
打开HiveJDBC的远程监控服务端口
在Eclipse中新建普通Java项目,右键项目新建文件夹lib
导入共11个jar包到lib目录中,并且添加至构建路径
从CentOS中的hive安装路径的conf目录下下载hive-log4j.properties至本地,放在src目录下并重命名为log4j.properties
修改log4j.properties第19行为hive.root.logger=DEBUG,console,作用是在运行时能在控制台输出hive的运行状态信息
控制台输出的信息不全面,如果要查看详细信息需要在CentOS中查看日志文件。日志文件的目录在hive安装路径的conf目录下hive-log4j.properties中配置的路径,
编写代码
Test01.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test01 {
public static void main(String[] args) throws Exception{
// 1.加载驱动
Class.forName("org.apache.hive.jdbc.HiveDriver");
// 2.打开连接
Connection connection = DriverManager.getConnection("jdbc:hive2://SZ01:10010/test");
// 3.获得操作对象
Statement statement = connection.createStatement();
// 4.操作Hive
String sql = "select a.energyConsumption,sum(b.retail) from orders b LEFT JOIN type a on a.id = b.typeId GROUP BY a.energyConsumption";
// 5.接受结果
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getFloat(1) + " " + rs.getString(2));
}
// 6.关闭连接
rs.close();
statement.close();
connection.close();
}
}
运行结果