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'='新的描述内容'); ``` 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数值类型: ![](https://i-blog.csdnimg.cn/direct/789baa43a9894d349b14469dfc4763f2.png) **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 -- 例如:[1, 2, 3] **2.2 映射(MAP)** 映射是一个键值对的集合,键和值可以是不同类型。 MAP -- 例如:{"apple": 1, "banana": 2} **2.3 结构体(STRUCT)** 结构体是一个字段的集合,每个字段可以有不同的类型。 STRUCT -- 例如:(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;

相关推荐
mysql学习中1 小时前
hive数仓要点总结
数据仓库·hive·hadoop
IT成长日记2 小时前
Hadoop文件操作指南:深入解析文件操作
大数据·hadoop·分布式
看海的四叔3 小时前
【SQL】MySql常见的性能优化方式
hive·sql·mysql·性能优化·数据分析·索引优化·sql语法
Yvonne9785 小时前
Apache Hive学习教程
hive·hadoop
IT成长日记11 小时前
【Hadoop入门】Hadoop生态之Sqoop简介
大数据·hadoop·sqoop
CDHong.it12 小时前
Hadoop大数据平台部署(Hadoop3.2.4+Hive4.0.1)
大数据·hadoop·分布式
chat2tomorrow1 天前
SQL2API是什么?SQL2API与BI为何对数据仓库至关重要?
数据库·数据仓库·低代码·bi·数据中台·sql2api
派可数据BI可视化2 天前
数据中台、BI业务访谈(二):组织架构梳理的坑
数据仓库·人工智能·信息可视化·数据分析·商业智能bi
酷爱码2 天前
Centos7下安装hive详细步骤
数据仓库·hive·hadoop
IT成长日记2 天前
【Hadoop入门】Hadoop生态之Yarn简介
大数据·hadoop·分布式