Apache Hive DML语句与函数使用

news2024/11/19 21:19:41

Hive SQL 加载数据

之前我们加载数据是,创建一张表,将结构化文件放到hadoop对应表路径下。这样我们就将表和文件进行映射了。但是这样比较暴力,官方不推荐。

这样的操作是直接跳过了Hive

Load加载数据
语法:
load data [local] inpath ‘filepath’ [overwrite] into table tablename;
写了local就是指本地文件系统,不管你客户端在哪里,指的是hive服务所在的本地文件系统。
不写local就是指hdfs文件系统
在这里插入图片描述

create table test.student_local(
    num int,
    name string,
    sex string,
    age int,
    dept string
)row format delimited
fields terminated by ",";

-- 加载本地文件,是复制的动作,源文件还在!
load data local inpath '/hivedata/student.txt' into table test.student_local;

-- 加载hdfs文件,这是移动文件的动作,源文件没了!
load data inpath '/student.txt' into table test.student_hdfs;

-- overwrite 关键字会将表中原有的数据清除掉
load data inpath '/student.txt' overwrite  into table test.student_hdfs;

Insert插入数据
Hive官方推荐加载数据方式:
清洗数据成为结构化文件,再使用load语法加载数据到表中,这样效率更高
也可以使用insert语法把数据插入到指定的表中,最常用的配合是把查询返回的结果插入到另一张表中。
insert into test.student_local values (11,“张三”,“男”,18,“MA”);
使用insert插入数据,底层会走MR程序,找yarn申请资源,走map阶段,reduce阶段,中间还有繁琐的shuffle,最后输出结果。
在这里插入图片描述
在这里插入图片描述
所以我们绝对不会使用insert语法插入数据。

常用的是insert+select语句
insert into 表1 select 字段1… from 表2
这个也是会执行一个MR程序。但是执行速度会比直接插入快一些,不知道为啥,视频教程没讲。


Hive SQL 查询数据

select * from 表名-- 查询所有数据
select 字段1,字段2... from 表名 -- 查询指定字段
select current_database();  -- current_database() 函数,查看当前使用的数据库


select distinct 字段1,字段2 from 表名  -- 去重查询,多个字段整体去重

-- where条件,可以使用函数,但是不能使用聚合函数
select 字段 from where 条件1 and 条件2 or 条件3 or length(字段)>10
is null
between and
in
-- 和sql差不多

--聚合操作,就是使用聚合函数
-- 聚合函数最大的特点是,不管原始数据有多少行,经过聚合操作只返回一条数据,这一条数据就是聚合函数的结果
-- 聚合函数,例如: count(不包括null值)、sum、max、min、avg
-- 使用 as 取别名,和sql一样

group by -- 分组
-- group by 语法,只会将分组后的数据的第一行数据返回,所以,你不在group by 里面的字段,需要使用聚合函数包起来
select state from 表名 group by state  --这是可以的
select state,count(字段1) from 表名 group by state  -- 这也是可以的
select state,字段2 from 表名 group by state -- 这是不行的

-- having 是分组之后的条件过滤,可以使用聚合函数 
select * from 表名 group by 字段名 having 条件

-- order by 排序


select [distinct] 字段...
from 表名
where 条件
group by 字段
having 条件
order by 字段   -- 默认升序ASC,降序DESC,可以多个字段,先根据字段1排序,相同之后,再根据字段2排序
limit 开始行,行数  -- limit 2,3 从第二行开始,取三条数据,行数从0开始计算。  limit 3,从0开始,取3条数据

-- 再查询过程中执行顺序
-- from > where > group by(含聚合) > having  > select > order
-- 聚合函数要比having子句优先执行
-- where子句再查询过程中执行优先级别优先于聚合语句

Hive SQL Join关联查询

表连接和SQL一样
内连接 inner join
在这里插入图片描述

外连接 left join , right join
左外连接
在这里插入图片描述

使用on 连接关系,笛卡尔积消除


Hive SQL中的函数使用

使用 show functions 查看当下可用的所有函数
通过 describe function extended 函数名 来出查看函数的使用方式

函数分类:内置函数,用户定义函数UDF
内置函数可分为:数值型函数,日期类型函数,字符串类型函数,集合函数,条件函数
用户定义函数根据输入输出的行数可分为3类:UDF,UDAF,UDTF
UDF,普通函数,一进一出
UDAF:聚合函数,多进一出
UDTF:表生成函数,一进多出

常用的内置函数
官方文档: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

--------------------String Functions 字符串函数 -------------------------
select length("qwe");  -- 查看长度
select reverse("qwe"); -- 反转
select concat("qwe","asd");  -- 连接两个字符串 输出:qweasd
select concat_ws('.','www',array('qwe','asd'));  -- 参数1:分隔符,参数2:可以是字符串,参数3:可以是符合类型字符串
-- 输出结果为 www.qwe.asd
select substr('qweasd',-2); -- 字符串截取,为负数,则从后往前截取,最后一位为-1,输出为:sd
select substr('qweasd',2,2); -- 索引从1开始 输出为:we
select split('qwe asd',' '); -- 按照指定分割符进行分割,返回为数组,索引从0开始


-------------------- Date Functions 日期函数 -------------------------
-- 获取当前日期
select current_date();
-- 获取当前UNIX时间戳函数,精确到秒
select unix_timestamp();
-- 日期转时间戳
select unix_timestamp("2022-12-09 14:20:09");
-- 指定格式日期转时间戳
select unix_timestamp("20221102 13:03:12","yyyyMMdd HH:mm:ss");
-- 时间戳转日期
select from_unixtime(0,'yyyy-MM-dd HH:mm:ss')
-- 日期比较函数 日期格式要求:yyyy-MM-dd HH:mm:ss or yyyy-MM-dd
-- 返回相差天数,不用考虑闰年问题,月份问题
select datediff('2012-12-09','2012-10-09')
-- 日期增加函数 
select date_add('2012-10-20',10);
-- 日期减少函数
select date_sub('2012-02-09',10);

-------------------- 数学函数 --------------------
-- 取整函数,四舍五入,返回double类型 3
select round(3.1415926)
-- 指定精度 四舍五入,返回double类型 3.1416
select round(3.14159264)
-- 取随机数,返回0~1范围内的随机数
select rand();
-- 指定种子取随机数,每次随机数都是固定的一个数,传入的种子不一样随机数也不一样
select rand(3)

-------------------- 条件函数 -------------------- 
select * from 表名 limit 3;

--------------------  条件判断 -------------------- 
-- 为true 取第一个,为false或者null 取第二个
select if(sex='男','M','W') from 表名
-- 将case值进行 when后面的值匹配,符合就输出then后面的值,后面可以跟许多个 when 值 then 值
select case 字段 when 50 then 'tom' when 100 then 'mary' else 'tim' end from 表名 ;

-------------------- 空值转换 -------------------- 
-- 字段如果不为bull则返回本身的值,如果为空则返回后面指定的值
select nvl(字段,'test')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【编译原理】实验一:熟悉实验环境VSCode并完成正则表达式转换为NFA

目录 实验一 熟悉实验环境VSCode并完成正则表达式转换为NFA 一、实验目的 二、预备知识 三、实验内容 VSCode的基本使用方法 安装和启动VSCode VSCode的窗口布局 使用VSCode将项目克隆到本地磁盘 使用VSCode登录平台 查看项目中的文件 实验源代码 演示程序的执行过程 四、实验过…

我国淡水养殖虾行业现状:小龙虾一路高歌猛进 青虾产量逐渐下滑

虾是一种生活在水中的节肢动物,属节肢动物甲壳类,种类很多,包括南极红虾、青虾、河虾、草虾、对虾、明虾、龙虾等。按出产来源不同,虾分为海水虾和淡水虾两种。 虾类养殖是以经济价值较高的虾类为对象,进行人工饲养生产…

houdini之旋转 revolve

话不多说,先上效果图 一根曲线绕指定轴旋转一周形成扫描面 有两组参数一个是旋转过程设置(revolve)一个是旋转结果设置(detail) 一、revolve Connectivity:如何构建几何体 origin:旋转轴原点 direction:…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.10 圆弧、饼图

本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV1AA411R75N 本节讲解如何绘制圆弧、饼图、弦图 1. 相关的 API 直接查看官方的帮助文档,可以看到有多个重载的方法 1.1 圆弧 绘制圆弧时,需要指定一个矩形,…

基于WOA优化的svm最优参数计算仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 WOA算法设计的既精妙又富有特色,它源于对自然界中座头鲸群体狩猎行为的模拟, 通过鲸鱼群体搜索、包围、追捕和攻击猎物等过程实现优时化搜索的目的。在原始的WOA中&#x…

数据挖掘期末-图注意力模型

PyGAT图注意力模型 ​  PyGAT实现的分类器: https://www.aliyundrive.com/s/vfK8ndntpyc 还在发烧,不是特别清醒,就简单写了写。用GAT进行关系预测,GAT可能是只做中间层,不过本来在GAT这一层就为了能懂就简化了很多…

基于双闭环PID控制器的永磁同步电机控制系统仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 永磁同步电机(PMSM,permanent magnet synchronous motor)的基本结构主要包括定子、转子以及端盖三个主要模块。其中转子磁路结构是永磁同步电机与其它电机最主…

Verilog刷题HDLBits——Exams/review2015 fsm

Verilog刷题HDLBits——Exams/review2015 fsm题目描述状态转换图代码结果题目描述 This is the fourth component in a series of five exercises that builds a complex counter out of several smaller circuits. See the final exercise for the overall design. You may …

人工智能期末复习:聚类(详细笔记)

文章目录聚类的概述常见的聚类算法原型聚类K均值聚类算法K均值聚类算法顺序前导聚类(Sequential leader clustering)高斯混合聚类(KMM)密度聚类DBSCAN聚类算法层次聚类AGNES聚类算法谱聚类聚类的评价(轮廓系数&#xf…

深度学习—00入门 神经网络

1、深度学习简介 深度学习是机器学习的一个分支,简单来说就是通过人工神经网络,强行在业务的 输入 和 输出 之间,暴力耦合一个出一个数学模型。 1.1 深度学习特点 1、由于是暴力耦合出来的模型,自然模型可解释性很差&#xff0c…

kkfile在线文件预览部署(Linux服务器版本)

一:kkfile部署指南 KKfile文件预览是一款开源的文档在线预览项目。项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等。 如果你是在windows系统中可以不用…

第二证券|锂离子聚合物电池的分类和使用注意事项

根据锂离子电池所用电解质资料的不同,锂离子电池分为液态锂离子电池和聚合物锂离子电池。聚合物锂离子电池所用的正负极资料与液态锂离子都是相同的,正极资料分为钴酸锂、锰酸锂、三元资料和磷酸铁锂资料,负极为石墨,电池工作原理…

RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础6 SpringBoot 整合RabbitMQ6.1 SpringBoot 整合 RabbitMQ【生产者】6.1.1 生产者6.2 SpringBoot 整合 RabbitMQ【消费者】6.2.1 消费者6.3 小结第一天 基础 6 Spri…

ESP32-CAM 使用 MicroPython 进行开发

ESP32-CAM 开发工具 ESP32-CAM是安信可发布小尺寸的摄像头模组。该模块可以作为最小系统独立工作,尺寸仅为2740.54.5mm。 ESP32-CAM可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、人脸识别以及其它物联网应用,是…

stm32f407VET6 系统学习 day02 GPIO 引脚的按键 中断,中断设置 (配置)

1.中断基本知识 1.知识点: STM32的所有中断(内部或外部)都是由NVIC(嵌套向量中断控制器)控制 注意:在KEIL5工程中的fwlib分组中,misc.c文件提供了NVIC相关的固件库函数。 2.中断源 :引起CPU中断的根源&am…

DirectX12_API流程入门篇

本部分主要记录下使用D3D12入门所涉及到的API,记录简单使用方式供后期快速查找使用(数据参照龙书实现)。 首先看一下DX12中拥有的管线能力: Raster Graphics PipelineCompute Graphics PipelineRay Tracing PipelineMesh Geometry Pipeline 具体管线示…

【数据结构】链式二叉树的实现

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 1.二叉树的概念及结构 1.1二叉树的概念 1.2二叉树的类型分类&#xff…

腾讯焦虑了,一向温文尔雅的马化腾也发脾气了

大家好,我是校长。昨天小马哥内部讲话在互联网上疯传,这应该是,腾讯这家公司创办以来,马化腾最焦虑也最外露的一次讲话了,重点大概涉及 3 大方面,8 大项内容:1、所有业务线 ROI 化,再…

【关于时间序列的ML】项目 9 :机器学习中的 ARIMA 模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

<Linux线程概念及线程控制>——《Linux》

目录 1. Linux线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程用途 2. Linux进程VS线程 进程和线程 进程的多个线程共享 关于进程线程的问题 3. Linux线程控制 POSIX线程库 创建线程 线程ID及进程地址空间布局 线程终止 线程等待 4. 分离线程 后记:●由于…