Hive详细讲解-基础语法快速入门

文章目录

    • 1.DDL数据库相关操作
      • 1.1创建数据库
      • 1.2指定路径下创建数据库
      • 1.3添加额外信息创建with dbproperties
      • 1.4查看数据库 结合like模糊查询
    • 2.查看某一个数据库的相关信息
      • 2.1.如何查看数据库信息,extended可选
      • 2.2修改数据库
    • 3.Hive基本数据类型
    • 4.复杂数据类型
    • 5.类型转换
      • 5.1类型隐士转换
      • 5.2类型显式转换
    • 6.建表逻辑*
      • Hive的读流程:
      • Hive的写流程:
    • 7.CTAS建表
    • 8.create table like建表
    • 9.创建表应用案例
    • 10.查看表语法
    • 11.DML
      • 1.Load
      • 2.Insert
      • 3.export
      • 4.import
    • 12.Hive查询语句
      • 12.1关系运算函数
      • 12.2聚合函数*
      • 12.3 group by
    • 13.Join语句
    • 14.Union
    • 15.Order by排序

1.DDL数据库相关操作

  • HiveSQL分为两部分DDL数据定义,DML数据操作

  • 下述代码块中所有[]圈起来的操作都表示可选的操作

1.1创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
  • COMMENT表示注释

  • Location表示HDFS路径

  • With dbproperties表示可以向数据库添加附加参数

  • 案例如下所示:

在这里插入图片描述

注:若不指定路径,其默认路径为${hive.metastore.warehouse.dir}/database_name.db

在这里插入图片描述

1.2指定路径下创建数据库

在这里插入图片描述

1.3添加额外信息创建with dbproperties

create database db_hive2
with dbproperties ('name'='junchao');

1.4查看数据库 结合like模糊查询

like查询可以使用通配符

*表示匹配任意个字符

|表示或的关系

在这里插入图片描述

2.查看某一个数据库的相关信息

2.1.如何查看数据库信息,extended可选

在这里插入图片描述

desc和describe效果相同

只有extended加入之后数据库才会展示parameters

在这里插入图片描述

2.2修改数据库

在这里插入图片描述

在这里插入图片描述

3.Hive基本数据类型

在这里插入图片描述

  • 所有数据类型均小写
  • string和varchar的区别,varchar(2000)需要指定长度例如2000不能超过65535,string不需要
  • decimal表示小数10进度准度decimal(总位数,小数位数)
  • 像decimal和varchar等需要传参的

4.复杂数据类型

在这里插入图片描述

  • 建表建立一个字段的名称:array 表示该字段为数组类型,元素为string
  • map和java同理,但是请注意小写;
  • struct表示结构体,和JavaBean类似。理解定义和取值即可。

5.类型转换

  • 类型转换情景:

    • int类型数据和bigint类型数据。

    • 往一张表insert数据-类型不匹配可以转换

5.1类型隐士转换

  • 仅学习规则即可

    在这里插入图片描述

  • 转换为参与运算的两个类型的最小转换类型

在这里插入图片描述

在这里插入图片描述

  • 具体逻辑如上图所示,其中,横轴从左到右类型逐渐变大。

5.2类型显式转换

  • cast函数做显示类型转换。
  • string转int数据如下所示

在这里插入图片描述

  • 当然注意事项,你这个字符必须是能转化为int类型的数据。

6.建表逻辑*

在这里插入图片描述

  • row format关键字,可选,表示对每行数据进行序列化和反序列化

  • stored as:指定文件格式,textfile(默认)、sequence file、orc file、parquet file.和底层的文件格式相关

  • partitioned by

指定hive的分区字段

分区指的是hive一张表的数据按照你指定的分区字段将数据存储到不同的字段中。

  • clustered by

只当分桶表

将hive一张表的数据分散的存储到多个文件中。

Hive的读流程:

在这里插入图片描述

Hive的写流程:

在这里插入图片描述

在这里插入图片描述

hive中任意一张表的建表语句都需要inputformat、outputformat、serializer

  • 若不配置,则默认配置序列化反序列化器

在这里插入图片描述

  • stored as后面紧跟inputformat、outputformat

  • row format重点:

ROW FORAMT DELIMITED 
[FIELDS TERMINATED BY char] 
[COLLECTION ITEMS TERMINATED BY char] 
[MAP KEYS TERMINATED BY char] 
[LINES TERMINATED BY char] 
[NULL DEFINED AS char]
  • 1.delimited只要声明,hive就会默认对每行数据进行序列化和反序列化。

  • delimited关键字可选一些分隔符

在这里插入图片描述

null值的存储格式;

配置null defined as ;默认值是\N

  • 2.serde序列化方式

与上述delimited序列化方式不同,serde可以指定特定的序列化方式如json格式。也可以自定义序列化格式。

row format serde serdename
  • 3.stored as 跟文件格式,hive底层可以直接进行映射例如textinputformat

当前章节仅了解即可, 后续详细讲解stored as等

7.CTAS建表

  • 用户利用select查询结果进行建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name 
[COMMENT table_comment] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

此处create 后面关键字仅有temporary

先前的可以指定external外部表等这是CTAS限制;

8.create table like建表

  • 用户可以在一张已经存在的表上进行复刻,但是与先前的区别是此建表是没有数据的
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[LIKE exist_table_name]
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

9.创建表应用案例

  • 创建一张表

在这里插入图片描述

  • 向hdfs中直接CLI方式传入数据

在这里插入图片描述

  • 按然后直接查询该表就能看到数据

在这里插入图片描述

这个表创建时没有声明外部表,external

那么默认表示是内部表

  • 删除表之后

在这里插入图片描述

在这里插入图片描述

  • 创建外部表测试案例

在这里插入图片描述

  • 删除之后查看hdfs

在这里插入图片描述

仍然存在

  • 练习2,serde和复杂数据类型

  • 首先创建一个json格式文件

在这里插入图片描述

  • 关于json格式文件存储格式,hive已经想好了,使用hive定义的JSON serde即可

  • json一级字段格式要求和表的字段一致

  • json的值和表的字段值要保持一致,可能使用到复杂数据类型

在这里插入图片描述

  • 一级字段要保持一致
  • 结构体写法
struct<name:string> 
  • row format格式要求json
row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
  • 注意一下复杂数据类型即可
  • myhadoop.json的文件格式一定要是压平之后的文件格式。否则报错
  • 此外服务器可以向hdfs上传任何后缀的文件,hive都能够识别到,只要文件格式和当前定义保持一致即可

在这里插入图片描述

在这里插入图片描述

  • 练习3,复杂数据类型取值

在这里插入图片描述

  • 练习4CTAS建表语句

在这里插入图片描述

  • 练习5CTL建表语句

在这里插入图片描述

10.查看表语法

1.展示所有表

在这里插入图片描述

2.查看某一个表的具体信息

在这里插入图片描述

在这里插入图片描述

  • formatted效果更全

在这里插入图片描述

3.表的重命名 rename to

在这里插入图片描述

4.修改表的列信息

  • 增加列
  • 更新列
  • 替换列

请你注意:

  • 三种列的修改仅仅对表的元数据信息进行修改,而hdfs源文件不会进行修改,若有修改需求请你手动修改
  • 新增列新增的column仅会追加到末尾

在这里插入图片描述

  • 新增列

在这里插入图片描述

  • 替换列

在这里插入图片描述

替换列指的是将所有字段重新赋值,也就是所有column进行重新替换。

  • 更新列

在这里插入图片描述

经验小结:

所有sql语句后面table 后面大多跟表明,可能和语法有关

上述修改表字段类型时,参考隐式转换,string式不能直接转int

在这里插入图片描述

如果非要string转int,可以使用hive提供的强转

set hive.metastore.disallow.incompatible.col.type.changes=false;

在这里插入图片描述

在这里插入图片描述

11.DML

  • DML(data manipulate language)
  • DML学习章节没有数据库删除语句,原因式hive是海量数据的分析计算引擎,很少对数据进行删除操作。

1.Load

  • 将文件导入表中,此功能和put一样

在这里插入图片描述

local指的是当前客户端向hdfs上 传文件

命令行客户端那么表示命令行当前节点

hiveserver2表示hiverserver2所在节点

在这里插入图片描述

可以多次into操作,表示追加

在这里插入图片描述

将hdfs路径下数据load

在这里插入图片描述

overwrite方式load数据在这里插入图片描述

load从客户端load 文件时copy方式

hdfs load,是hdfs文件移动方式

2.Insert

在这里插入图片描述

  • 普通插入语句

在这里插入图片描述

into可以替换为overwrite

与load不同

load若进行覆盖写,那么直接overwrite into 或into

而insert 要么into 要么overwrite

  • 用户点名数据插入到表中

在这里插入图片描述

此处注意的点是:values后面一个括号表示 要插入的一行数据

  • 将查询结果插入到目标路径

此处必须用overwrite而不能用into

在这里插入图片描述

local表示本地否则是hdfs路径

row format声明行格式或声明每一行序列化反序列化

stored as声明文件格式

3.export

4.import

在这里插入图片描述

我的暂时实现不了,先暂定

12.Hive查询语句

  • 基本语法

在这里插入图片描述

  • 默认ALL模式除非单独加入distinct
  • select from where groupby having order by limit
  • where是对每一行数据进行过滤
  • having是对分组数据进行过滤

在这里插入图片描述

12.1关系运算函数

  • where,having后面紧跟过滤条件,不可避免会跟关系运算函数

在这里插入图片描述

在这里插入图片描述

  • between and关键字表示区间判断[a,b],同理between前面可以加入not达到相反的效果
  • 判空操作用is null ,is not null,你就记住,null是string类型,所以is很合理。
  • in 关键字和一个集合做判断,若在集合中,那么返回true
  • like关键字模糊匹配,此处模糊和show后面的like表示不一样,show 后面的like可以用*表示全部,此处平替为了%
  • 注意一下正则匹配rlike regexp

在这里插入图片描述

在这里插入图片描述

12.2聚合函数*

  • 将多行数据进行聚合到一行进行计算如count

  • 语法

在这里插入图片描述

  • 查询总行数

在这里插入图片描述

  • count(*)统计总行数不会忽略null
  • count(1)统计非Null总行数

COUNT(*) 会对所有列进行检查(即使不会读取实际列值),以确保行的存在性。

COUNT(1) 只会检查一列的存在性或用虚拟列来替代。

性能上count(1)略微高效

  • Count(id)此用法和count(1)一样,id可能为空因此不会统计在内

在这里插入图片描述

  • SQL跑MR执行过程

在这里插入图片描述

  • 查询所有员工的薪水最大值

在这里插入图片描述

  • 计算最大值,max聚合函数要放到select后面而不是过滤条件处
  • min聚合函数与count相同
  • 平均值avg()同

12.3 group by

  • 案例需求,我现在想要做更为复杂的统计 ,此处肯定不能count

在这里插入图片描述

当然你直接将job进行分组后还是要统计行数的

因此需要和count(*)一起使用。

在这里插入图片描述

在这里插入图片描述

老师精讲:分组聚合做的第一部将group by应用到用户指定的字段例如job,然后使用你指定的聚合函数对每一组进行统计等。

在这里插入图片描述

细节:

hive语法规定,你使用了分组聚合那么就不能在select查询分组以外的数据了

在这里插入图片描述

  • 你能选的字段,分组字段和聚合函数
  • 对分组聚合函数进行过滤

在这里插入图片描述

having专门对group by进行过滤。

13.Join语句

  • 多张表进行横向拼接成一个宽表
  • join操作会生成一张虚拟表,此表包括join表的所有字段。当然deptno两张表都有,因此虚拟表都会存在

在这里插入图片描述

  • 计算dept表中每一个loc有多少个员工

直接在join完成的虚拟表进行分组聚合操作即可

在这里插入图片描述

  • Join连接类型

等值连接,非等值连接(非等值连接不常用 )

DG快捷键,格式化当前sql代码;

ctrl shift enter

在这里插入图片描述

  • Join连接

内连接

外连接

左外,右外连接,端外连接,多表连接,笛卡尔连接,联合

  • 内连接

1.默认情况下单写一个join表示内连接。

2.只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。

select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
join dept d 
on e.deptno = d.deptno;

在这里插入图片描述

内连接实现的效果就是二者连接条件的公共字段被返回

  • 左外连接
select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
left join dept d 
on e.deptno = d.deptno;

左外连接

  • 行返回的是左表的全部行
  • 列返回的是左右量表的全部列
  • 关于连接条件d表能够匹配上e表就直接返回,如果没有匹配上返回null

在这里插入图片描述

  • 由外连接和左外连接相同

返回的行是右表的所有行,列是所有列

注意:若单join默认就是内连接,left join,right join,full join默认就是外连接

  • 满外连接

  • full join 或 full outer join

在这里插入图片描述

返回所有行所有列,没匹配上返回null

在这里插入图片描述

  • 笛卡尔积(慎用)
  • ab两个表粉笔m,n行数据,进行笛卡尔积操作,a表的每一行作为k与b表的每一行进行join关联

在这里插入图片描述

  • 出现笛卡尔积的情况

    • 内连接不写连接条件
    • 连接条件无效 例如on 1=1;
    • 特殊写法
    select * from emp,location
    

14.Union

  • Join将两个表的数据进行横向的拼接,而Union是将两个表的数据进行纵向拼接

在这里插入图片描述

  • 上下两表union的前置要求

    • 两个表的字段个数相同
    • 每个字段的类型也要前后对应
  • union连接两个查询语句

在这里插入图片描述

在这里插入图片描述

  • Union注意事项
    • 1.连接的必须是select查询语句,不能表union表
    • 2.字段名不一致不影响union,只要字段个数,字段类型对应即可。字段名不一致,最终返回结果的字段名取第一个表定义的字段名;
    • 3.union和union all都是上下拼接sql的结果,这点是和join有区别的,join是左右关联,union和union all是上下拼接。union去重,union all不去重。

15.Order by排序

  • 按照工资升序排序 order by 默认升序
-- 15.按照工资升序排序
select * from emp
order by sal;
  • 降序的话使用desc
-- 15.按照工资升序排序
select * from emp
order by sal desc;
  • 注意:生产环境Order by是高危操作,可以看一下底层执行计划

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959925.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度解析:基于Vue 3与Element Plus的学校管理系统技术实现

一、项目架构分析 1.1 技术栈全景 核心框架&#xff1a;Vue 3 TypeScript UI组件库&#xff1a;Element Plus&#xff08;含图标动态注册&#xff09; 状态管理&#xff1a;Pinia&#xff08;用户状态持久化&#xff09; 路由方案&#xff1a;Vue Router&#xff08;动态路…

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言&#xff0c;结合Django框架构建后端逻辑&#xff0c;并运用J…

【架构面试】一、架构设计认知

涉及分布式锁、中间件、数据库、分布式缓存、系统高可用等多个技术领域&#xff0c;旨在考查候选人的技术深度、架构设计能力与解决实际问题的能力。 1. 以 Redis 是否可以作为分布式锁为例&#xff1a; 用 Redis 实现分布式锁会存在哪些问题&#xff1f; 死锁&#xff1a;如果…

DrawDB:超好用的,免费数据库设计工具

DrawDB&#xff1a;超好用的&#xff0c;免费数据库设计工具 引言 在软件开发过程中&#xff0c;数据库设计是一个至关重要的环节。 无论是关系型数据库还是非关系型数据库&#xff0c;良好的数据库设计都能显著提升系统的性能和可维护性。 然而&#xff0c;数据库设计往往…

如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt

文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…

【Linux】线程、线程控制、地址空间布局

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、Linux线程1.1 线程的优缺点1.2 线程异常和用途1.3 线程等待1.3 线程终止1.4 线程分离1.5 线程ID和地址空间布局1.6 线程栈 1、…

c语言操作符(详细讲解)

目录 前言 一、算术操作符 一元操作符&#xff1a; 二元操作符&#xff1a; 二、赋值操作符 代码例子&#xff1a; 三、比较操作符 相等与不相等比较操作符&#xff1a; 大于和小于比较操作符&#xff1a; 大于等于和小于等于比较操作符&#xff1a; 四、逻辑操作符 逻辑与&…

宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等

需求&#xff1a; 将word中所有excel表格的格式进行统一化&#xff0c;修改其中的数字类型为“宋体&#xff0c; 五号&#xff0c;右对齐&#xff0c; 不加粗&#xff0c;不倾斜”&#xff0c;其中的中文为“宋体&#xff0c; 五号&#xff0c; 不加粗&#xff0c;不倾斜” 数…

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

GESP2024年3月认证C++六级( 第三部分编程题(2)好斗的牛)

参考程序&#xff08;暴力枚举&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int N; vector<int> a, b; int ans 1e9; int main() {cin >> N;a.resize(N);b.resize(N);for (int i 0; i &l…

QFramework实现原理 一 :日志篇

作为一款轻量级开源的Unity程序框架&#xff0c;QFramework结合了作者凉鞋多年的开发经验&#xff0c;是比较值得想要学习框架的初学者窥探一二的对象&#xff0c;我就尝试结合凉鞋大大给出的文档和ai&#xff0c;解析一下其背后的代码逻辑&#xff0c;以作提升自己的一次试炼 …

图论汇总1

1.图论理论基础 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种类 整体上一般分为 有向图 和 无向图。 有向图是指 图中边是有方向的&a…

_CLASSDEF在C++中的用法详解及示例

_CLASSDEF在C++中的用法详解及示例 _CLASSDEF的定义与使用示例说明代码解析总结在C++编程中,宏(Macro)是一种预处理指令,它允许程序员在编译之前对代码进行文本替换。_CLASSDEF是一个自定义的宏,它提供了一种便捷的方式来定义类及其相关类型。本文将详细介绍_CLASSDEF在C+…

华为数据之道-读书笔记

内容简介 关键字 数字化生产 已经成为普遍的商业模式&#xff0c;其本质是以数据为处理对象&#xff0c;以ICT平台为生产工具&#xff0c;以软件为载体&#xff0c;以服务为目的的生产过程。 信息与通信技术平台&#xff08;Information and Communication Technology Platf…

从CRUD到高级功能:EF Core在.NET Core中全面应用(四)

初识表达式树 表达式树&#xff1a;是一种可以描述代码结构的数据结构&#xff0c;它由一个节点组成&#xff0c;节点表示代码中的操作、方法调用或条件表达式等&#xff0c;它将代码中的表达式转换成一个树形结构&#xff0c;每个节点代表了代码中的操作例如&#xff0c;如果…

系统思考—问题分析

很多中小企业都在面对转型的难题&#xff1a;市场变化快&#xff0c;资源有限&#xff0c;团队协作不畅……这些问题似乎总是困扰着我们。就像最近和一位企业主交流时&#xff0c;他提到&#xff1a;“我们团队每天都很忙&#xff0c;但效率始终没见提升&#xff0c;感觉像是在…

MySQL 的索引类型【图文并茂】

基本分类 文本生成MindMap:https://app.pollyoyo.com/planttext <style> mindmapDiagram {node {BackgroundColor yellow}:depth(0) {BackGroundColor SkyBlue}:depth(1) {BackGroundColor lightGreen} } </style> * MySQL 索引** 数据结构角度 *** B树索引*** 哈…

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用&#xff1f;华硕笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…

【深度学习】 自动微分

自动微分 正如上节所说&#xff0c;求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。 但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动…

虚幻浏览器插件 UE与JS通信

温馨提示&#xff1a;本节内容需要结合插件Content下的2_Communication和Resources下的sample.html 一起阅读。 1. UE调用JS 1.1 JS脚本实现 该部分共两步: 导入jstote.js脚本实现响应函数并保存到 ue.interface 中 jsfunc 通过json对象传递参数&#xff0c;仅支持函数名小…