目录
[第1章 Hive基本概念](#第1章 Hive基本概念)
[第3章 hive中数据库的操作](#第3章 hive中数据库的操作)
[1、hive DDL 操作](#1、hive DDL 操作)
[2、Hive DML 操作](#2、Hive DML 操作)
[4、hive 表中数据加载方式](#4、hive 表中数据加载方式)
[第4章 hive中的数据类型](#第4章 hive中的数据类型)
[1. 基本数据类型](#1. 基本数据类型)
[2. 复杂数据类型](#2. 复杂数据类型)
[第5章 hive中的一个emp案例](#第5章 hive中的一个emp案例)
[1. 表结构设计](#1. 表结构设计)
[2. 数据加载](#2. 数据加载)
[3. 常见SQL查询示例](#3. 常见SQL查询示例)
第1章 Hive基本概念
1.1什么是hive
1)hive简介
- Hive:由Facebook开源用于解决海量结构化日志的数据统计工具
- Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类sQL查询功
- 可以将数据加载到表中,编写SQL进行分析
- 底层依赖Hadoop,所以每一次都要启动Hadoop(hdfs以及yarn)
- 可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL
- hive底层计算框架可以使用MapReduce,也可以使用Spark\Tez
- hive不是数据库,而是一个将MapReduce包了一层壳儿,类似于中介。
2)体系架构

第2章、安装步骤:
1、上传jar包至/usr/local/soft
将hive-3.1.2上传到虚拟机中的/usr/local/soft目录下
2、解压并重命名
tar -zxvf apache-hive-3.1.2-bin.tar.gz
重命名
mv apache-hive-3.1.2-bin hive-3.1.2/
3、配置环境变量
vim /etc/profile
#增加以下内容:
HIVE_HOME
export HIVE_HOME=/usr/local/soft/hive-3.1.2/
export PATH=PATH:HIVE_HOME/bin
#保存退出 source 使其生效
source /etc/profile
4.配置HIVE文件
cd $HIVE_HOME/conf
复制命令
cp hive-env.sh.template hive-env.sh
编辑
vim hive-env.sh
增加如下内容
Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/soft/hadoop-2.7.6
Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/soft/hive-3.1.2/conf
2、配置hive-site.xml
上传hive-site.xml到conf目录:
hive-site.xml文件内容:
python
<configuration>
<property>
<!-- 查询数据时 显示出列的名字 -->
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<!-- 在命令行中显示当前所使用的数据库 -->
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<!-- 默认数据仓库存储的位置,该位置为HDFS上的路径 -->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 8.x -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT</value>
</property>
<!-- 8.x -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- hiveserver2服务的端口号以及绑定的主机名 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
</configuration>
3、配置日志
创建日志目录
cd $HIVE_HOME
mkdir log
设置日志配置
cd conf
cp hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties
修改以下内容:
property.hive.log.dir = /usr/local/soft/hive-3.1.2/log
4、修改默认配置文件
cp hive-default.xml.template hive-default.xml
5、上传MySQL连接jar包
上传 mysql-connector-java-5.1.37.jar 至 /usr/local/soft/hive/lib目录中
6、修改MySQL编码
修改mysql编码为UTF-8:
1、 编辑配置文件
vim /etc/my.cnf
2、加入以下内容:
client
default-character-set = utf8mb4
mysqld
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
3、 重启mysql
systemctl restart mysqld
7、初始化HIVE
schematool -dbType mysql -initSchema
8、进入hive
hive
第3章 hive中数据库的操作
1、hive DDL 操作
Hive DDL用于定义Hive 数据库模式,其命令包括create、drop、alter、truncate、show
和describe等,主要是对数据库和表进行创建、修改、删除等操作。
(1)创建数据库
【语法】
CREATE (DATABASESCHEMA) [IF NOT EXISTS] database _name
COMMENT database_comment
LOCATION hdfs_path\]\[WITH DBPROPERTIES
> 示例:
>
> 创建empdb数据库。
>
> 关键代码:
>
> hive\>create database empdb;
>
> \> show databases;
>
> \> use empdb;
>
> 其中,"show databases;"显示数据库列表,"useempdb;"选择empdb作为当前操作
>
> 的数据库。
**(2)修改数据库**
1. 修改数据库描述:
```python
ALTER DATABASE database_name SET DBPROPERTIES ('description'='新的描述内容');
```
2. 修改数据库位置
```python
ALTER DATABASE database_name SET LOCATION '新的存储路径';
```
##### 2、Hive DML 操作
1. **插入数据(INSERT)**
1.1 插入查询结果到表
```python
INSERT INTO TABLE sales_summary
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
```
1.2 插入数据到分区表
```python
INSERT INTO TABLE sales_data PARTITION (year)
SELECT product_id, amount, year
FROM raw_sales
WHERE year = 2024;
```
1.3 从文件加载数据
LOAD DATA LOCAL INPATH '/local/path/data.csv' INTO TABLE sales;
2. **更新数据(UPDATE)**
```python
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
```
3. **删除数据(DELETE)**
DELETE FROM orders
WHERE order_date < '2024-01-01';
##### 3、hive的本地模式
**1. 本地模式的特点**
* **运行环境**:查询在单个节点上运行,不依赖于Hadoop的分布式计算框架(如MapReduce或Tez)。
* **数据存储**:数据存储在本地文件系统中,而不是HDFS。
* **适用场景**:适用于处理小规模数据集,或者在开发环境中快速测试查询逻辑。
* **性能限制**:由于不使用分布式计算资源,本地模式的性能通常低于集群模式,不适合处理大规模数据。
**2. 启用本地模式**
要启用Hive的本地模式,需要设置`hive.exec.mode.local.auto`参数为`true`。此外,还可以通过设置其他参数来控制本地模式的行为。
**2.1 自动本地模式**
Hive可以自动根据查询的复杂性和数据量决定是否使用本地模式。启用自动本地模式的命令如下:
SET hive.exec.mode.local.auto = true;
默认情况下,当查询满足以下条件时,Hive会自动选择本地模式:
* 输入文件的总大小小于`hive.exec.mode.local.auto.inputbytes.max`(默认值为128MB)。
* 输入文件的总数小于`hive.exec.mode.local.auto.inputfiles.max`(默认值为4)。
**2.2 强制本地模式**
如果需要强制某个查询始终运行在本地模式,可以在查询中显式指定:
```python
SET hive.exec.mode.local.auto = true;
SET hive.exec.mode.local.auto.inputbytes.max = -1; -- 无限制
SET hive.exec.mode.local.auto.inputfiles.max = -1; -- 无限制
```
然后执行:
SELECT * FROM small_table WHERE id < 10;
3.hive的打印当前数据库
在Hive中,如果你想查看当前使用的数据库,可以使用以下命令:
SQL:
SELECT CURRENT_DATABASE();
hive命令行:
hive> show current database;
##### 4、hive 表中数据加载方式
在Hive中,数据加载是将外部数据导入到Hive表中的过程。
**1. 使用`LOAD DATA`命令**
`LOAD DATA`是Hive中最常用的数据加载方式,支持从本地文件系统或HDFS加载数据到Hive表中。
**1.1 从本地文件系统加载数据**
LOAD DATA LOCAL INPATH '/home/user/data.csv' INTO TABLE my_table;
* `LOCAL INPATH`表示数据文件存储在本地文件系统中。
**1.2 从HDFS加载数据**
LOAD DATA INPATH 'hdfs://namenode:8020/user/hive/data/file.txt' INTO TABLE my_table;
* `INPATH`表示数据文件存储在HDFS中。
1.3**使用`INSERT INTO`语句**
`INSERT INTO`语句可以将查询结果插入到目标表中
INSERT INTO TABLE sales_summary
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
##### 5、hive中的流量统计
在Hive中进行流量统计通常涉及以下几个步骤:数据准备、表的创建、数据加载以及编写统计查询。
**1. 数据准备**
确保流量数据已经存储在HDFS或其他支持的存储系统中。
**2. 创建Hive表**
创建一个Hive表用于存储流量数据。可以使用以下HiveQL命令:
```python
CREATE TABLE IF NOT EXISTS traffic_data (
timestamp STRING,
traffic INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
```
**3. 加载数据**
将数据加载到Hive表中。假设数据存储在HDFS路径`/user/hive/data/traffic.txt`中,可以使用以下命令:
LOAD DATA INPATH '/user/hive/data/traffic.txt' INTO TABLE traffic_data;
**4. 编写统计查询**
根据需求编写Hive查询语句。例如,统计流量波动率(标准差与平均值的比值):
```python
WITH traffic_stats AS (
SELECT
AVG(traffic) AS avg_traffic,
STDDEV(traffic) AS stddev_traffic
FROM
traffic_data
)
SELECT
stddev_traffic / avg_traffic AS volatility_ratio
FROM
traffic_stats;
```
* `AVG(traffic)`计算流量的平均值。
* `STDDEV(traffic)`计算流量的标准差。
* `volatility_ratio`为流量波动率。
##### 6、hive数据导出
1. 使用Hive的`INSERT OVERWRITE`命令导出数据
Hive提供了`INSERT OVERWRITE`命令,可以将查询结果导出到本地文件系统或HDFS。
1.1导出到本地文件系统:
INSERT OVERWRITE LOCAL DIRECTORY '/path/to/local/directory'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
SELECT * FROM your_table;
1.2导出到HDFS:
INSERT OVERWRITE DIRECTORY '/path/to/hdfs/directory'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
SELECT * FROM your_table;
2. 使用Hive的`EXPORT TABLE`命令
`EXPORT TABLE`命令可以将整个表的数据和元数据导出到指定目录:
EXPORT TABLE your_table TO '/path/to/export/directory';
#### 第4章 hive中的数据类型
在Hive中,数据类型分为**基本数据类型** 和**复杂数据类型**。
##### **1. 基本数据类型**
基本数据类型用于存储简单的值,如整数、浮点数、字符串等。
1.1数值类型:

**1.2 字符串类型**
| 数据类型 | 描述 |
|--------------|--------------------------|
| `STRING` | 可变长度的字符数据,最大长度为 2GB |
| `VARCHAR(n)` | 可变长度的字符数据,最大长度为 65535 字符 |
| `CHAR(n)` | 固定长度的字符数据,最大长度为 255 字符 |
**1.3 日期和时间类型**
| 数据类型 | 描述 | 格式 |
|-------------|----------------|-----------------------------------|
| `DATE` | 日期类型,只包含年月日 | `YYYY-MM-DD` |
| `TIMESTAMP` | 日期和时间,精确到纳秒 | `YYYY-MM-DD HH:MM:SS[.nnnnnnnnn]` |
| `INTERVAL` | 时间间隔类型,用于表示时间段 | 例如:`INTERVAL '1' YEAR` |
**1.4 布尔类型**
| 数据类型 | 描述 |
|-----------|--------------------------|
| `BOOLEAN` | 布尔值,只能取 `TRUE` 或 `FALSE` |
##### **2. 复杂数据类型**
复杂数据类型用于存储结构化的数据,如数组、映射和结构体。
**2.1 数组(ARRAY)**
数组是一个有序的元素集合,所有元素必须是同一类型。
ARRAY