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;

相关推荐
Q26433650232 小时前
【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
想ai抽12 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
starfalling102412 小时前
【hive】一种高效增量表的实现
hive
顧棟14 小时前
【Yarn实战】Yarn 2.9.1滚动升级到3.4.1调研与实践验证
hadoop·yarn
D明明就是我17 小时前
Hive 拉链表
数据仓库·hive·hadoop
嘉禾望岗50321 小时前
hive join优化和数据倾斜处理
数据仓库·hive·hadoop
yumgpkpm21 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
忧郁火龙果1 天前
六、Hive的基本使用
数据仓库·hive·hadoop
忧郁火龙果1 天前
五、安装配置hive
数据仓库·hive·hadoop
chad__chang2 天前
dolphinscheduler安装过程
hive·hadoop