Hive-基础介绍

2023-12-21 18:39:42


前言

本文将介绍HiveQL的概述、数据模型、DDL(Data Definition Language)命令和DML(Data Manipulation Language)命令。同时还会涵盖常用字符串函数、数值函数、日期函数以及聚合函数等内容。


一、HiveQL介绍

1. 概述

  • Hive是基于Hadoop的数据仓库基础设施,它提供了一种类似于SQL的查询语言称为HiveQL(Hive Query Language)。
  • HiveQL是用于处理结构化数据的查询语言,它将SQL查询转换为MapReduce任务,从而实现在Hadoop集群上进行数据分析和处理。
  • HiveQL的设计目标是提供一种简单易用的接口,使非专业的数据分析师和开发人员能够利用Hadoop进行数据处理和分析。它的语法类似于SQL,因此熟悉SQL的人可以很容易地上手使用HiveQL。

2. 数据模型

  • HiveQL基于表的概念,它将数据组织成表,并支持表的分区和分桶。表由列和行组成,每个列都有一个数据类型。
  • Hive支持多种内置数据类型,如整数、字符串、日期等。此外,Hive还支持复杂数据类型,如数组、结构体和映射。
  • Hive的数据模型与关系型数据库的数据模型有一些区别。在Hive中,表是逻辑上的概念,数据存储在Hadoop分布式文件系统(HDFS)中的文件中。每个表可以有一个或多个分区,分区是根据表的某个列进行划分的,这样可以提高查询效率。此外,Hive还支持将表按照某个列进行分桶,以进一步提高查询性能。

3. 数据定义语言(DDL)

HiveQL提供了一组数据定义语言(DDL)命令,用于创建、修改和删除表、分区和分桶等数据库对象。

以下是一些常用的DDL命令:

(1) 创建表

使用CREATE TABLE命令创建表,并指定表的列、数据类型和存储格式等信息。

例如:

CREATE TABLE my_table (
  id INT,
  name STRING,
  age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

在上面的示例中,我们创建了一个名为my_table的表,它包含了idnameage三个列,数据以逗号分隔(默认以制表符\t作为字段分隔符),并以文本文件的形式存储。

(2) 创建分区表

使用CREATE TABLE命令创建分区表,并指定分区列。

例如:

CREATE TABLE my_partitioned_table (
  id INT,
  name STRING,
  age INT
)
PARTITIONED BY (country STRING)
STORED AS PARQUET;

在上面的示例中,我们创建了一个名为my_partitioned_table的分区表,它包含了idnameage三个列,以及一个分区列country。数据以Parquet格式存储。

(3) 添加分区

使用ALTER TABLE命令添加新的分区。

例如:

ALTER TABLE my_partitioned_table ADD PARTITION (country='USA');

在上面的示例中,我们向my_partitioned_table表添加了一个名为USA的分区。

(4) 删除表

使用DROP TABLE命令删除表。

例如:

DROP TABLE my_table;

在上面的示例中,我们删除了名为my_table的表。

4. 数据操作语言(DML)

HiveQL提供了一组数据操作语言(DML)命令,用于查询和操作表中的数据。以下是一些常用的DML命令:

(1) 插入数据

使用INSERT INTO命令将数据插入表中。

例如:

INSERT INTO my_table (id, name, age) VALUES (1, 'Alice', 25);

在上面的示例中,我们向my_table表插入了一条数据。

(2) 查询数据

使用SELECT命令查询表中的数据。

例如:

SELECT * FROM my_table;

在上面的示例中,我们查询了my_table表中的所有数据。

(3) 更新数据

使用UPDATE命令更新表中的数据。

例如:

UPDATE my_table SET age = 30 WHERE id = 1;

在上面的示例中,我们将my_table表中id为1的记录的age字段更新为30。

(4) 删除数据

使用DELETE命令删除表中的数据。

例如:

DELETE FROM my_table WHERE id = 1;

在上面的示例中,我们删除了my_table表中id为1的记录。


二、HiveQL函数

1. 字符串函数

字符串函数在HiveQL中提供了丰富的操作和处理文本数据的功能。以下是一些常用的字符串函数:

1.1 CONCAT

CONCAT 函数用于将多个字符串拼接成一个新的字符串。它可以接受任意数量(至少两个)的参数,并按照参数顺序将它们连接起来。

示例代码:

SELECT CONCAT('Hello', ' ', 'World') AS concatenated_string;
-- 输出结果: Hello World

1.2 SUBSTRING

SUBSTRING 函数用于截取指定位置和长度的子串。它需要三个参数:源字符串、起始位置和要截取子串长度。

示例代码:

SELECT SUBSTRING('Hello World', 7, 5) AS substring_result;
-- 输出结果: World 

1.3 LOWER/UPPER

LOWER UPPER 函数分别将给定字符转换为小写或大写形式。

示例代码:

SELECT LOWER('HELLO') AS lower_case_string;   
--输出 结果 :  	hello 

SELECT UPPER ('world' ) as upper_case_string ;  
--输出 结果 :  	WORLD    

2.数值函数

数值函数可以对数字进行各种计算和转换操作,方便处理数值型数据 。以下是一些常见的数值函数:

2.1 ABS

返回给 定数字 表达 式 ( 或 列) 绝对值 。

示例代码:

SELECT ABS(-10) AS absolute_value;
-- 输出结果: 10 

2.2 ROUND

ROUND 函数用于将数字四舍五入到指定的位数。它接受两个参数:要进行四舍五入的数字表达式(或列)和保留小数点后几位。

示例代码:

SELECT ROUND(3.14159, 2) as rounded_number;  
--输出 结果 :  	3 .14   

2.3 FLOOR

FLOOR 函数返回不大于给定参数表达式(或列)最大整数。

示例代码:

SELECT FLOOR(4.9 ) as floor_number;  
--输出 结果 :  	4    

3. 日期函数

日期函数提供了处理和计算日期类型数据的功能。以下是一些常用的日期函数:

3.1 YEAR

从给定日期中提取年份 。

示例代码:

SELECT YEAR('2021-09-01') AS extracted_year;
-- 输出结果:2021   

3.2 MONTH

从给定日历中提取月份。

示例如下 :

SELECT MONTH ('2021 -09 -01' ) as extracted_month ;
--输出 结 果 :9     

3.3 DAY

从给定日历中提取天数 。

示例如下 :

SELECT DAY ('2021 -09 -01' )as extracted_day ;    
--输 出结 果 :1     

4. 聚合函数

聚合函数在HiveQL中用于对数据进行汇总计算,常见的聚合函数包括:

4.1 SUM

SUM 函数用于计算指定列或表达式的总和。

示例代码:

CREATE TABLE sales (
    product_id INT,
    quantity INT,
    price DECIMAL(10,2)
);

INSERT INTO sales VALUES (1,10,100),(2,5 ,200),(1 ,20 ,50 );

SELECT SUM(quantity) as total_quantity FROM sales; 
-- 输出结果: 35  

4.2 AVG

AVG 函数用于计算指定列或表达式的平均值。

示例代码:

SELECT AVG(price) as average_price FROM sales ;
-- 输出结果:116 .67    

4.3 MAX

返回指定列或表达式的最大值。

示例代 码:

SELECT MAX(quantity) as max_quantity FROM sales ;  
--输出 结果 :  	20     

总结

HiveQL是Hive的查询语言,它提供了类似于SQL的语法,用于在Hadoop集群上进行数据分析和处理。本文详细介绍了HiveQL的概述、数据模型、DDL和DML命令、数据转换函数。通过学习和使用HiveQL,您可以更方便地利用Hadoop进行大数据处理和分析。

希望通过阅读本文能够对您理解和使用 HiveQL 有所帮助。

参考链接:

文章来源:https://blog.csdn.net/zcs2312852665/article/details/135124210
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。