漫谈大数据 - HiveSQL总结(二)查询操作

news2024/11/18 22:42:41

        导语:HiveSQL各关键字详解,hive函数大全,类似于个人记录工具书,后续遇到其他的也会继续加进来。

有关hive库表操作请见上篇:漫谈大数据 - HiveSQL总结(一)库表操作_昊昊该干饭了的博客-CSDN博客针对hive各种数据库操作,内部表、外部表、分区表、分桶表的表属性查看修改操作以及hive数据的导入与导出详解。https://blog.csdn.net/qq_52213943/article/details/130287680?spm=1001.2014.3001.5501

hive简介:

        hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MR任务来执行。

目录

Hive查询语法

WHERE 条件筛选

GROUP BY 分组

join 连接

order by 排序

sort by 局部排序

distribute by  分区排序

cluster by

Hive常用函数

聚合函数

关系运算

REGEXP操作

数学运算

逻辑运算

数值运算

条件函数

日期函数

字符串函数

窗口函数

复杂数据类型操作

Map类型构建

Map类型访问

Map类型长度

Struct类型构建

Struct类型访问

Array类型构建

Array类型访问

Array类型长度

类型转换函数


Hive查询语法

SELECT [ALL | DISTINCT] select_expr, select_expr, ... 
FROM table_reference
[WHERE where_condition] 
[GROUP BY col_list [HAVING condition]] 
[CLUSTER BY col_list 
  | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list] 
] 
[LIMIT number]

WHERE 条件筛选

select * from score where score < 60;

注意
小于某个值是不包含null的,如上查询结果是把 score 为 null 的行剔除的

GROUP BY 分组

select s_id ,avg(s_score) 
from score 
group by s_id;



分组后对数据进行筛选,使用having

select s_id ,avg(s_score) as avgscore 
from score 
group by s_id 
having avgscore > 85;

注意
如果使用 group by 分组,则 select 后面只能写分组的字段或者聚合函数

join 连接

INNER JOIN 内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来
select * from techer t [inner] join course c on t.t_id = c.t_id; -- inner 可省略

LEFT OUTER JOIN 左外连接:左边所有数据会被返回,右边符合条件的被返回
select * from techer t left join course c on t.t_id = c.t_id; -- outer可省略

RIGHT OUTER JOIN 右外连接:右边所有数据会被返回,左边符合条件的被返回、
select * from techer t right join course c on t.t_id = c.t_id;

FULL OUTER JOIN 满外(全外)连接: 将会返回所有表中符合条件的所有记录。如果任一表的指定字段没有符合条件的值的话,那么就使用NULL值替代。
SELECT * FROM techer t FULL JOIN course c ON t.t_id = c.t_id ;
  1. hive2版本已经支持不等值连接,join on条件后面可以使用大于小于符号了;并且也支持 join on 条件后跟or (早前版本 on 后只支持 = 和 and,不支持 > < 和 or)
  2. 如hive执行引擎使用MapReduce,一个join就会启动一个job,一条sql语句中如有多个join,则会启动多个job

order by 排序


SELECT * FROM student s 
LEFT JOIN score sco 
ON s.s_id = sco.s_id 
ORDER BY sco.s_score DESC;

注意

全局排序,只会有一个reduce
ASC(ascend): 升序(默认)

DESC(descend): 降序

sort by 局部排序

每个MapReduce内部进行排序,对全局结果集来说不是排序。

设置reduce个数
set mapreduce.job.reduces=3;

查看设置reduce个数
set mapreduce.job.reduces;

查询成绩按照成绩降序排列
select * from score sort by s_score;
 
将查询结果导入到文件中(按照成绩降序排列)
insert overwrite local directory '/export/servers/hivedatas/sort' select * from score sort by s_score;

distribute by  分区排序

distribute by:类似MR中partition,进行分区,结合sort by使用

注意

Hive要求 distribute by 语句要写在 sort by 语句之前

设置reduce的个数,将我们对应的s_id划分到对应的reduce当中去
set mapreduce.job.reduces=7;

通过distribute by  进行数据的分区
select * from score distribute by s_id sort by s_score;

cluster by

当distribute by和sort by字段相同时,可以使用cluster by方式.
cluster by除了具有distribute by的功能外还兼具sort by的功能。

但是排序只能是正序排序,不能指定排序规则为ASC或者DESC。

以下两种写法等价
select * from score cluster by s_id;
select * from score distribute by s_id sort by s_id;

Hive常用函数

聚合函数

hive支持 count(),max(),min(),sum(),avg() 等常用的聚合函数

  • 指定列值的数目:count()
  • 指定列值求和:sum()
  • 指定列的最大值:max()
  • 指定列的最小值:min()
  • 指定列的平均值:avg()
  • 非空集合总体变量函数:var_pop(col)
  • 非空集合样本变量函数:var_samp (col)
  • 总体标准偏离函数:stddev_pop(col)
  • 分位数函数:percentile(BIGINT col, p)
  • 中位数函数:percentile(BIGINT col, 0.5)
聚合操作时要注意null值
count(*) 包含null值,统计所有行数
count(id) 不包含null值
min 求最小值是不包含null,除非所有值都是null
avg 求平均值也是不包含null

关系运算

支持:等值(=)、不等值(!= 或 <>)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)

空值判断(is null)、非空判断(is not null)

  • A LIKE B: LIKE比较,如果字符串A符合表达式B 的正则语法,则为TRUE
  • A RLIKE B:JAVA的LIKE操作,如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE
  • A REGEXP B:功能与RLIKE相同

REGEXP操作

语法: A REGEXP B
操作类型: strings
描述: 功能与RLIKE相同
示例:select 1 from tableName where 'footbar' REGEXP '^f.*r$';
结果:1

数学运算

支持所有数值类型:加(+)、减(-)、乘(*)、除(/)、取余(%)、位与(&)、位或(|)、位异或(^)、位取反(~)

逻辑运算

逻辑与(and)、逻辑或(or)、逻辑非(not)

数值运算

  • 取整函数:round(double a)
  • 指定精度取整函数:round(double a, int d)
  • 向下取整函数:floor(double a)
  • 向上取整函数:ceil(double a)
  • 取随机数函数:rand(),rand(int seed)
  • 自然指数函数:exp(double a)
  • 以10为底对数函数:log10(double a)
  • 以2为底对数函数:log2()
  • 对数函数:log()
  • 幂运算函数:pow(double a, double p)
  • 开平方函数:sqrt(double a)
  • 二进制函数:bin(BIGINT a)
  • 十六进制函数:hex()
  • 绝对值函数:abs()
  • 正取余函数:pmod()

条件函数

  • if
  • case when
  • coalesce(c1,c2,c3)
  • nvl(c1,c2)

日期函数

  • 获得当前时区的UNIX时间戳: unix_timestamp()
  • 时间戳转日期函数:from_unixtime()
  • 日期转时间戳:unix_timestamp(string date)
  • 日期时间转日期函数:to_date(string timestamp)
  • 日期转年函数:year(string date)
  • 日期转月函数:month (string date)
  • 日期转天函数: day (string date)
  • 日期转小时函数: hour (string date)
  • 日期转分钟函数:minute (string date)
  • 日期转秒函数: second (string date)
  • 日期转周函数: weekofyear (string date)
  • 日期比较函数: datediff(string enddate, string startdate)
  • 日期增加函数: date_add(string startdate, int days)
  • 日期减少函数:date_sub (string startdate, int days)

字符串函数

  • 字符串长度函数:length(string A)
  • 字符串反转函数:reverse(string A)
  • 字符串连接函数: concat(string A, string B…)
  • 带分隔符字符串连接函数:concat_ws(string SEP, string A, string B…)
  • 字符串截取函数: substr(string A, int start, int len)
  • 字符串转大写函数: upper(string A)
  • 字符串转小写函数:lower(string A)
  • 去空格函数:trim(string A)
  • 左边去空格函数:ltrim(string A)
  • 右边去空格函数:rtrim(string A)
  • 正则表达式替换函数: regexp_replace(string A, string B, string C)
  • 正则表达式解析函数: regexp_extract(string subject, string pattern, int index)
  • URL解析函数:parse_url(string urlString, string partToExtract [, string keyToExtract])
  • 返回值: string
  • json解析函数:get_json_object(string json_string, string path)
  • 空格字符串函数:space(int n)
  • 重复字符串函数:repeat(string str, int n)
  • 首字符ascii函数:ascii(string str)
  • 左补足函数:lpad(string str, int len, string pad)
  • 右补足函数:rpad(string str, int len, string pad)
  • 分割字符串函数: split(string str, string pat)
  • 集合查找函数: find_in_set(string str, string strList)

窗口函数

  • 分组求和函数:sum(pv) over(partition by cookieid order by createtime) 有坑,加不加 order by 差别很大,具体详情在下面第二部分。
  • 分组内排序,从1开始顺序排:ROW_NUMBER() 如:1234567
  • 分组内排序,排名相等会在名次中留下空位:RANK() 如:1233567
  • 分组内排序,排名相等不会在名次中留下空位:DENSE_RANK() 如:1233456
  • 有序的数据集合平均分配到指定的数量(num)个桶中:NTILE()
  • 统计窗口内往上第n行值:LAG(col,n,DEFAULT)
  • 统计窗口内往下第n行值:LEAD(col,n,DEFAULT)
  • 分组内排序后,截止到当前行,第一个值:FIRST_VALUE(col)
  • 分组内排序后,截止到当前行,最后一个值: LAST_VALUE(col)
  • 小于等于当前值的行数/分组内总行数:CUME_DIST()

复杂数据类型操作

Map类型构建

语法: map (key1, value1, key2, value2, …)
说明:根据输入的key和value对构建map类型

Map类型访问

语法: M[key]
操作类型: M为map类型,key为map中的key值
说明:返回map类型M中,key值为指定值的value值。
比如,M是值为{'f' -> 'foo', 'b' -> 'bar', 'all' -> 'foobar'}的map类型,那么M['all']将会返回'foobar'

Map类型长度

语法: size(Map<k .V>)
返回值: int
说明: 返回map类型的长度

Struct类型构建

语法: struct(val1, val2, val3, …)
说明:根据输入的参数构建结构体struct类型

Struct类型访问

语法: S.x
操作类型: S为struct类型
说明:返回结构体S中的x字段。
比如,对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段

Array类型构建

语法: array(val1, val2, …)
说明:根据输入的参数构建数组array类型

Array类型访问

语法: A[n]
操作类型: A为array类型,n为int类型
说明:返回数组A中的第n个变量值。数组的起始下标为0。
比如,A是个值为['foo', 'bar']的数组类型,那么A[0]将返回'foo',而A[1]将返回'bar'

Array类型长度

语法: size(Array<T>)
返回值: int
说明: 返回array类型的长度

类型转换函数

类型转换函数: cast
语法: cast(expr as <type>)
返回值: Expected "=" to follow "type"

-- 将字符串类型1 转为数字1

select cast('1' as int) from tableName;

欢迎点赞收藏评论交流~

转载请标明出处

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

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

相关文章

一条SQL如何被MySQL架构中的各个组件操作执行的?

文章目录 1. 单表查询SQL在MySQL架构中的各个组件的执行过程2. SELECT的各个关键字在哪里执行&#xff1f;3. 表关联查询SQL在MySQL架构中的各个组件的执行过程4. LEFT JOIN将过滤条件放在子查询中再关联和放在WHERE子句上有什么区别&#xff1f;5. 聚集索引和全表扫描有什么区…

推动开发者平台本土化,高通加速中国XR内容生态发展

随着VR和AR技术快速发展&#xff0c;产品不断成熟&#xff0c;体验也变得越来越优秀。据悉&#xff0c;Meta Quest系列VR头显出货量超2000万台&#xff0c;基本证明了VR开始在消费类电子产品中占据一席之地。与此同时&#xff0c;近两年AR眼镜也在逐渐升温&#xff0c;成为了创…

day17_异常

今日内容 零、 复习昨日 一、作业 二、异常 三、自定义异常 零、 复习昨日 见晨考,重点是String类的方法 StringBuffer和StringBuiler面试问 日期解析和格式化 int i Integer.parseInt(“111”); 一、作业 略,见答案二、异常 2.1 介绍 异常,就是程序出现的不正常的情况. 2.2…

RPA流程自动化技术在金融机构的落地方案详解

金融机构在面向数字化运营的转型过程中&#xff0c;需将智能流程自动化技术整合到数字化转型战略中&#xff0c;规划建设统一的企业流程自动化处理平台&#xff0c;作为数字化运营的辅助支撑类系统&#xff0c;明确流程治理方法和运营模式&#xff0c;确保足够的规模弹性&#…

【深度学习】Softmax回归及前馈神经网络

1 实验内容简介 1.1 实验目的 &#xff08;1&#xff09;熟练掌握tensor相关各种操作&#xff1b; &#xff08;2&#xff09;掌握广义线性回归模型&#xff08;logistic模型、sofmax模型&#xff09;、前馈神经网络模型的原理&#xff1b; &#xff08;3&#xff09;熟练掌…

第一章: uniapp引入axios异步框架

第一章&#xff1a; uniapp引入axios异步框架 在学习uniapp的过程中&#xff0c;发现uniapp框架默认集成request请求框架存在问题&#xff0c;发送请求时在header中塞入token值&#xff0c;而后台接收不到&#xff0c;也就是说uniapp默认的request请求框架&#xff0c;不支持在…

巨烽数字化采购项目启动,甄云助力医疗影像显示领军企业数智化升级

近日&#xff0c;医疗影像显示行业的领军者深圳市巨烽显示科技有限公司&#xff08;以下简称“巨烽”&#xff09;联合甄云科技举办数字化采购管理项目启动会&#xff0c;双方相关部门负责人及项目组成员参加了此次会议。 会上&#xff0c;就巨烽的数字化采购管理系统建设升级…

AI写作机器人-ai文章生成器在线

使用AI续写生成器&#xff0c;让内容创作事半功倍&#xff01; 随着人工智能技术的不断进步和应用&#xff0c;AI续写生成器的出现为内容创作带来了全新的革命。这种技术可以让你的写作事半功倍&#xff0c;让你轻松生成高质量的文章和内容。在这篇文章中&#xff0c;我们将介绍…

如何伪原创-自媒体伪原创软件

批量文字伪原创的作用 批量文字伪原创是指通过对原文进行修改、改写、调整等方式&#xff0c;生成大量新的类似原文的文本。其作用主要包括以下几个方面&#xff1a; 提高文本的独创性&#xff1a;批量伪原创可以有效地避免大量相似内容的出现&#xff0c;从而提高文本的独创性…

我如何学习使用 Jetpack Compose 开发 Android 应用程序

我如何学习使用 Jetpack Compose 开发 Android 应用程序 Jetpack Compose 和 Android 开发简介 2021 年 7 月&#xff0c;Google 发布了用于为 Android 应用构建原生 UI 的全新工具包 1.0 版。Jetpack Compose 是 Android 开发人员的游戏规则改变者&#xff0c;因为它从通过 X…

C#如何解决项目打开问题 error : 找不到指定的 SDK“Microsoft.NET.Sdk.WindowsDesktop”

错误提示&#xff0c;问题描述 后来发现&#xff0c;直接安装rider还是不能解决解决&#xff08;会自动配置关联&#xff08;path等&#xff09;&#xff0c;甚至自动下载的&#xff0c;官方的visual studio反而不会&#xff0c;之后再详细看怎么弄了&#xff09; VS2022项目…

IDEA 用上这款免费 GPT4 插件,生产力爆表了

大家好&#xff0c;我是一航&#xff01; 早前给大家分享过GPT的一些玩法&#xff0c;但是依旧有很多铁子没有掌握魔法的奥秘&#xff0c;始终没有用上&#xff1b;前两天&#xff0c;一兄台分享给我一款 IDE 插件&#xff1a;Bito-ChatGPT &#xff0c;安装就能直接在IDE中使…

如何选择合适的网络自动化工具

通过网络自动化工具实现网络自动化是所有网络组织的关键。如果没有合适的网络自动化工具&#xff0c;拥有由许多设备组成的大型网络环境的组织将无法执行重要操作&#xff0c;例如按时备份配置、实时跟踪不需要的更改以及遵守行业法规。当组织未能使用正确的网络自动化工具来执…

yolov8训练自己的数据集遇到的问题

训练分类模型 1.如何更改模型的类别数nc 根据本地模型配置文件.yaml可以设置nc 但是&#xff0c;这里无法用到预训练模型.pt模型文件&#xff0c;预训练模型的权重参数是在大数据集上训练得到的&#xff0c;泛化性能可能比较好&#xff0c;所以&#xff0c;下载了官方的分类…

Flink+Kafka、Pulsar实现端到端的exactly-once语义

End-to-End Exactly-Once Processing in Apache Flink with Apache Kafka 2017年12月Apache Flink社区发布了1.4版本。该版本正式引入了一个里程碑式的功能&#xff1a;两阶段提交Sink&#xff0c;即TwoPhaseCommitSinkFunction。该SinkFunction提取并封装了两阶段提交协议中的…

【离散数学】测试五 图论

1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树. A. 对 B. 错 …

视频剪辑必备,这6个网站承包你一年的音效素材

视频剪辑中需要用到各种声音、音效素材&#xff0c;这些音效不仅能让你的视频更丰富&#xff0c;还能更好的表达视频内容&#xff0c;传递情绪让观者感到共鸣。很多朋友剪辑过程中为了找到好的配乐、音效&#xff0c;往往会花费大量的时间&#xff0c;找到了还有可能受版权限制…

装机必备(二补充)--Win10系统盘,装Win10系统(无法引导启动问题-找不到任务设备驱动程序。请确保安装介质包含正确的驱动程序)

对于联想的thinkpad&#xff0c;开机时候按F1来更改bios设置&#xff0c;F12是选择U盘引导启动 thinkpad如何进入bios界面_thinkpad怎么进入u盘启动&#xff0d;系统城 1 F1界面1.按→方向键移动到Security&#xff0c;将secure boot改成disabled&#xff0c;关闭安全启动&…

【数据结构】简单快速过一遍红黑树

文章目录 红黑树1 红黑树的概念2 红黑树的性质3 红黑树节点的定义4 红黑树的插入操作5 红黑树的验证6 红黑树与AVL树的比较7.C实现红黑树 红黑树 1 红黑树的概念 ​ 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;…

记一次oracle入库慢,log file switch (checkpoint incomplete)

AWR报告生成&#xff1a;Oracle AWR报告生成步骤_小百菜的博客-CSDN博客 发现log file switch (checkpoint incomplete) 这里出现了大量的log file switch(checkpoint incomplete)等待事件。 查看redo每个组的大小、状态 select group#,thread#,archived,status, bytes/102…