首页 > 其他分享 >Apache Hive详解

Apache Hive详解

时间:2024-08-12 09:57:32浏览次数:12  
标签:函数 -- Hive 详解 hive Apache 数据 select

文章目录

一、Apache Hive概述

  • Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和
    分析存储在Hadoop文件中的大型数据集。
  • Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行。
  • Hive由Facebook实现并开源。
  • Hive利用HDFS存储数据,利用MapReduce查询分析数据。
  • Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。

二、Apache Hive架构、组件

1.Hive架构图

请添加图片描述

2.Hive组件

(1)用户接口

包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许
外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
请添加图片描述

(2)元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
请添加图片描述

(3)Driver驱动程序

包括语法解析器、计划编译器、优化器、执行器
请添加图片描述

(4)执行引擎

Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。
请添加图片描述

(5)启动命令

hive --service metastore
hive --service hiveserver2
//杀掉端口占用了10000的yunDetectService服务,占用端口

三、Apache Hive元数据

1.元数据

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属
性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

2.Hive Metadata

  • Hive Metadata即Hive的元数据。
  • 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。
  • 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

3.Hive Metastore

  • Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
  • 有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。
  • metastore远程模式
    请添加图片描述

四、Hive SQL语言

1.Hive SQL之数据库与建库

  • 在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下。
  • 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下。

(1)create database

用于创建新的数据库。

  • COMMENT:数据库的注释说明语句。
  • LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db。
  • WITH DBPROPERTIES:用于指定一些数据库的属性配置。

举例:创建数据库study_test

create database if not exists study_test
    comment "这是一个学习的测试数据库"
    with dbproperties ('createBy' = 'root');

请添加图片描述

(2)use database

  • 选择特定的数据库。
  • 切换当前会话使用哪一个数据库进行操作。
use study_test;

(3)drop database

  • 删除数据库
  • 默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
  • 要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE。
drop database study_test;

五、hive案例:将结构化文件映射到hive中

1.结构化txt文件

95001	李勇	男	20	CS
95002	刘晨	女	19	IS
95003	王敏	女	22	MA
95004	张立	男	19	IS

2.hive中建表

create table study_test.t_student
(
    stu_no int comment '学号',
    name   string comment '姓名',
    gender string comment '性别',
    age    int comment '年龄',
    remark string comment '备注'
) row format delimited
    fields terminated by "\t";	//表示以制表符作为分割数据列的标志

3.上传文件

将文件上传到你新建表的目录下面
请添加图片描述

4.查询数据

可以看到已经将数据映射到hive的数据库中了

SELECT *
  FROM study_test.t_student;

请添加图片描述

六、Apache Hive DML语句与函数使用

1.Hive SQL DML语法之加载数据

  • 在Hive中建表成功之后,就会在HDFS上创建一个与之对应的文件夹,且文件夹名字就是表名;
  • 文件夹父路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse;
  • Hive官方推荐使用Load命令将数据加载到表中

新建student_local.txt填充数据

95001,李勇,男,20,CS
95002,刘晨,女,19,IS
95003,王敏,女,22,MA
95004,张立,男,19,IS
95005,刘刚,男,18,MA
95006,孙庆,男,23,CS
95007,易思玲,女,19,MA
95008,李娜,女,18,CS
95009,梦圆圆,女,18,MA
95010,孔小涛,男,19,CS
95011,包小柏,男,18,MA
95012,孙花,女,20,CS
95013,冯伟,男,21,CS
95014,王小丽,女,19,CS
95015,王君,男,18,MA
95016,钱国,男,21,MA
95017,王风娟,女,18,IS
95018,王一,女,19,IS
95019,邢小丽,女,19,IS
95020,赵钱,男,21,IS
95021,周二,男,17,MA
95022,郑明,男,20,MA

新建表

--step1:建表
--建表student_local 用于演示从本地加载数据
create table student_local
(
    num  int,
    name string,
    sex  string,
    age  int,
    dept string
) row format delimited fields terminated by ',';

load数据

LOAD DATA LOCAL INPATH 'D:/hadoop/student_local.txt' INTO TABLE student_local;

请添加图片描述

2.Hive SQL-DML-Insert插入数据

最常用的配合是把查询返回的结果插入到另一张表中。
insert+select表示:将后面查询返回的结果作为内容插入到指定表中。

  • 需要保证查询结果列的数目和需要插入数据表格的列数目一致。
  • 如果查询出来的数据类型和插入表格对应的列数据类型不一致,将会进行转换,但是不能保证转换一定成功,转换失败的数据将会为NULL。
--创建一张目标表 只有两个字段
create table student_from_insert
(
    sno   int,
    sname string
);
--使用insert+select插入数据到新表中
insert into table student_from_insert select num, name from student_local;

select * from student_from_insert;

请添加图片描述

3.Hive SQL DML语法之查询数据

distinct去重

--返回所有匹配的行 去除重复的结果
select distinct state from t_usa_covid19;

其他的用法都和mysql很像,大致都是一样的方式。

4.Hive 常用函数入门

Hive的函数分为两大类:内置函数(Built-in Functions)、用户定义函数UDF(User-Defined Functions):

  • 内置函数可分为:数值类型函数、日期类型函数、字符串类型函数、集合函数、条件函数等;
  • 用户定义函数根据输入输出的行数可分为3类:UDF、UDAF、UDTF。
    • 根据函数输入输出的行数:
      UDF(User-Defined-Function)普通函数,一进一出
      UDAF(User-Defined Aggregation Function)聚合函数,多进一出
      UDTF(User-Defined Table-Generating Functions)表生成函数,一进多出

5.Hive 常用的内置函数

函数库https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

(1)String Functions 字符串函数

  • 字符串长度函数:length
  • 字符串反转函数:reverse
  • 字符串连接函数:concat
  • 带分隔符字符串连接函数:concat_ws
  • 字符串截取函数:substr,substring
------------String Functions 字符串函数------------
select length("dsaf");
select reverse("olklf");
select concat("angela","baby");
--带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+)
select concat_ws('.', 'www', array('gsdffsd', 'cn'));
--字符串截取函数:substr(str, pos[, len]) 或者 substring(str, pos[, len])
select substr("angelababy",-2); --pos是从1开始的索引,如果为负数则倒着数
select substr("angelababy",2,2);
--分割字符串函数: split(str, regex)
select split('apache hive', ' ');

(2)Date Functions 日期函数

----------- Date Functions 日期函数 -----------------
--获取当前日期: current_date
select current_date();
--获取当前UNIX时间戳函数: unix_timestamp
select unix_timestamp();
--日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp("2011-12-07 13:01:03");
--指定格式日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss');
--UNIX时间戳转日期函数: from_unixtime
select from_unixtime(1618238391);
select from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');
--日期比较函数: datediff 日期格式要求'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'
select datediff('2012-12-08','2012-05-09');
--日期增加函数: date_add
select date_add('2012-02-28',10);
--日期减少函数: date_sub
select date_sub('2012-01-1',10);

(3)Mathematical Functions 数学函数

----Mathematical Functions 数学函数-------------
--取整函数: round 返回double类型的整数值部分 (遵循四舍五入)
select round(3.1415926);
--指定精度取整函数: round(double a, int d) 返回指定精度d的double类型
select round(3.1415926,4);
--取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数
select rand();
--指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列
select rand(3);

(4)Conditional Functions 条件函数

--if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
select if(1=2,100,200);
select if(sex ='男','M','W') from student limit 3;
--空值转换函数: nvl(T value, T default_value)
select nvl("allen","itcast");
select nvl(null,"itcast");
--条件转换函数: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end;
select case sex when '男' then 'male' else 'female' end from student limit 3;

标签:函数,--,Hive,详解,hive,Apache,数据,select
From: https://blog.csdn.net/weixin_45404884/article/details/140594111

相关文章

  • grep命令详解
    grep是Linux和Unix系统中用于搜索文本的强大命令之一。它通过指定的模式(通常是正则表达式)在文件或标准输入中搜索匹配的行,并输出这些行。基本用法grep[选项]PATTERN[FILE...]PATTERN:要搜索的模式(字符串或正则表达式)。[FILE…]:要搜索的文件名列表。如果省略文件......
  • 查询分析框架:Hive
    ApacheHive是一个数据仓库软件项目,用于对存储在分布式存储系统(如Hadoop)中的大数据进行查询和管理。它定义了一种类似于SQL的查询语言,称为HiveQL,使得用户可以方便地进行数据查询、数据摘要和分析。以下是Hive的一些关键特性:1.**SQL兼容**:HiveQL提供了类似于SQL......
  • Spring框架中的@Bean注解详解
    Spring框架中的@Bean注解详解在Java的Spring框架中,@Bean是一个非常重要的注解,它允许开发者在注解方法中创建和配置对象,这些对象随后会被Spring容器管理。本文将通过一个简单的实例来详细解释@Bean注解的使用方法和它在Spring框架中的作用。什么是@Bean注解?@Bean注解是一......
  • 人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意
    大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意力,word2vec与代码详解。本课程面向高级人工智能算法工程师,深入讲解自然语言处理(NLP)中的关键语言模型技术,包括seq2seq模型及其增强版加入注意力机制......
  • haproxy负载均衡之-调度算法详解
    HAProxy的调度算法分为静态调度算法、动态调度算法和其他调度算法静态算法:按照事先定义好的规则轮询公平调度,不关⼼后端服务器的当前负载、链接数和响应速度等,且⽆法实时修改权重,只能靠重启HAProxy⽣效。动态算法:基于后端服务器状态进⾏调度适当调整,⽐如优先调度⾄当前负载较......
  • MySQL基础详解(3)
    文章目录索引普通索引创建索引修改表结构(添加索引)创建表的时候直接指定删除索引的语法唯一索引创建索引修改表结构创建表的时候直接指定使用ALTER命令添加和删除索引使用ALTER命令添加和删除主键显示索引信息约束非空约束:唯一约束:主键约束:外键约束:索引MySQL......
  • LeetCode 22. 括号生成 回溯写法详解
    22.括号生成22.括号生成题目来源题目分析题目难度题目标签题目限制解题思路核心算法步骤代码实现代码解读性能分析测试用例扩展讨论优化写法其他实现总结22.括号生成题目来源22.括号生成题目分析给定一个数字n,表示生成括号的对数,要求设计一个函数生成所......
  • LeetCode 216. 组合总和 III 回溯写法详解
    216.组合总和III216.组合总和III题目来源题目分析题目难度题目标签题目限制解题思路核心算法步骤代码实现代码解读性能分析测试用例扩展讨论优化写法其他实现总结216.组合总和III题目来源216.组合总和III题目分析题目要求找出所有相加之和为n的k......
  • USB协议详解第6讲(USB描述符-端点描述符)
    1.USB描述符USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB端点描述符的组成。2.端点描述符组成前面讲了设备描述符、标准配置描述符、接口描述符,本篇我们讲解端点描述符。首先......
  • Tomcat详解
    1.安装tomcat1.去到tomcat官网下载tomcat安装包,下载的是免安装的包,解压就可用apache-tomcat-8.5.85.zip解压后的如下: 目录说明:bin存放启动和关闭Tomcat的脚本文件,比较常用的是catalina.sh、startup.sh、shutdown.sh三个文件conf存放Tomcat服务器的各种配置文......