文章目录
前言
本文将介绍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
的表,它包含了id
、name
和age
三个列,数据以逗号分隔(默认以制表符\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
的分区表,它包含了id
、name
和age
三个列,以及一个分区列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 有所帮助。
参考链接: