Hive-基础入门

目录

[第1章 Hive基本概念](#第1章 Hive基本概念)

第2章、安装步骤:

1、上传jar包至/usr/local/soft

2、解压并重命名

3、配置环境变量

4.配置HIVE文件

[第3章 hive中数据库的操作](#第3章 hive中数据库的操作)

[1、hive DDL 操作](#1、hive DDL 操作)

[2、Hive DML 操作](#2、Hive DML 操作)

3、hive的本地模式

[4、hive 表中数据加载方式](#4、hive 表中数据加载方式)

5、hive中的流量统计

6、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简介

  1. Hive:由Facebook开源用于解决海量结构化日志的数据统计工具
  2. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类sQL查询功
  3. 可以将数据加载到表中,编写SQL进行分析
  4. 底层依赖Hadoop,所以每一次都要启动Hadoop(hdfs以及yarn)
  5. 可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL
  6. hive底层计算框架可以使用MapReduce,也可以使用Spark\Tez
  7. 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文件

1、配置hive-env.sh

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&amp;useSSL=false&amp;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'='新的描述内容');
  1. 修改数据库位置
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;
  1. 更新数据(UPDATE)
python 复制代码
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
  1. 删除数据(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;
  1. 使用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 布尔值,只能取 TRUEFALSE
2. 复杂数据类型

复杂数据类型用于存储结构化的数据,如数组、映射和结构体。

2.1 数组(ARRAY)

数组是一个有序的元素集合,所有元素必须是同一类型。

复制代码
ARRAY<INT> -- 例如:[1, 2, 3]

2.2 映射(MAP)

映射是一个键值对的集合,键和值可以是不同类型。

复制代码
MAP<STRING, INT> -- 例如:{"apple": 1, "banana": 2}

2.3 结构体(STRUCT)

结构体是一个字段的集合,每个字段可以有不同的类型。

复制代码
STRUCT<id:INT, name:STRING, age:INT> -- 例如:(1, "Alice", 25)

3. 数据类型转换

Hive支持显式和隐式的数据类型转换。例如:

复制代码
SELECT CAST(column_name AS STRING) FROM table_name;

第5章 hive中的一个emp案例

以下是一个基于Hive的emp表案例,包括表结构设计、数据加载以及一些常见的SQL查询示例。

1. 表结构设计

(1) dept

dept表存储部门信息,包含部门编号、部门名称和部门所在地:

复制代码
CREATE TABLE dept (
    deptno INT,
    dname STRING,
    loc STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

(2) emp

emp表存储员工信息,包含员工编号、姓名、职位、领导编号、入职日期、工资、奖金和部门编号:

复制代码
CREATE TABLE emp (
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate STRING,
    sal DECIMAL(10, 2),
    comm DECIMAL(10, 2),
    deptno INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
2. 数据加载

假设数据文件已经准备好,存储在本地或HDFS中,可以使用以下命令加载数据:

2.1加载dept表数据

复制代码
LOAD DATA LOCAL INPATH '/path/to/dept_data.csv' INTO TABLE dept;

2.2加载emp表数据

复制代码
LOAD DATA LOCAL INPATH '/path/to/emp_data.csv' INTO TABLE emp;
3. 常见SQL查询示例

(1) 查询总员工数

python 复制代码
SELECT COUNT(DISTINCT empno) AS total_employees FROM emp;

(2) 查询总共有多少个职位

复制代码
SELECT COUNT(DISTINCT job) AS total_jobs FROM emp;

(3) 统计每个职位的员工数量,并按数量降序排列

复制代码
SELECT job, COUNT(empno) AS count_emp
FROM emp
GROUP BY job
ORDER BY count_emp DESC;

(4) 查询入职最早的员工

复制代码
SELECT ename, hiredate
FROM emp
ORDER BY hiredate ASC
LIMIT 1;

(5) 统计每个职位的最高工资和平均工资

复制代码
SELECT job, MAX(sal) AS max_salary, AVG(sal) AS avg_salary
FROM emp
GROUP BY job;

(6) 查询每个地区工资最高的员工

复制代码
SELECT e.ename, e.sal, d.loc
FROM emp e
JOIN dept d ON e.deptno = d.deptno
WHERE (d.loc, e.sal) IN (
    SELECT loc, MAX(sal)
    FROM emp e2
    JOIN dept d2 ON e2.deptno = d2.deptno
    GROUP BY loc
);

(7) 查询上半年入职员工最多的地区

复制代码
WITH hire_data AS (
    SELECT e.ename, e.hiredate, d.loc,
           CASE WHEN MONTH(e.hiredate) <= 6 THEN 'first_half_year' ELSE 'last_half_year' END AS hire_year
    FROM emp e
    JOIN dept d ON e.deptno = d.deptno
)
SELECT loc, COUNT(ename) AS count
FROM hire_data
WHERE hire_year = 'first_half_year'
GROUP BY loc
ORDER BY count DESC
LIMIT 1;
相关推荐
王小王-1233 天前
基于 Hive 的网易云音乐数据分析及可视化系统
hive·hadoop·数据分析·音乐数据分析·网易云音乐分析·hive音乐分析·hadoop网易云
极光代码工作室3 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
Database_Cool_3 天前
大规模数据分析降本指南:AnalyticDB Serverless 弹性架构实战
数据仓库·阿里云·架构·数据分析·serverless
Database_Cool_3 天前
什么是湖仓一体?和数据仓库的本质区别(附 AnalyticDB MySQL 湖仓一体方案)
数据库·数据仓库·mysql
Chris _data3 天前
WPF 学习第三天 — Modbus RTU 串口通信
hadoop·学习·wpf
知识分享小能手3 天前
Hadoop学习教程,从入门到精通,Flume日志采集系统 — 完整知识点与案例代码(9)
hadoop·学习·flume
递归尽头是星辰3 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
Francek Chen4 天前
【大数据处理与分析】MapReduce:06 MapReduce编程实践
大数据·hadoop·分布式·mapreduce
王小王-1234 天前
基于 Hadoop 的二手房数据分析与可视化平台项目展示
大数据·hadoop·数据分析·大数据房价分析·二手房价格预测·hive房价数据分析
知识分享小能手4 天前
Hadoop学习教程,从入门到精通, HBase 分布式数据库 — 完整知识点与案例代码(8)
数据库·hadoop·分布式