【大数据Hive】hive 运算符使用详解

目录

一、前言

二、hive 运算符分类

三、hive 运算符操作演示

3.1  数据准备

创建表dual

加载一个文件dual.txt到dual表中

模拟测试

3.2  关系运算符

is null空值判断

 is not null 非空值判断

like使用

3.3  算术运算符

取整操作

取余操作: %  

位与操作: &

位或操作: |

位异或操作: ^

3.4  逻辑运算符

与操作: A AND B 

或操作: A OR B  

非操作: NOT A 、!A  

 在:A IN (val1, val2, ...)

不在:A NOT IN (val1, val2, ...)

逻辑是否存在: [NOT] EXISTS (subquery)

3.5  其他运算符


一、前言

在很多编程语言中都需要运算符去完成一些常规的或复杂的算数运算、逻辑运算等,比如mysql,java,nginx的shell等等,运算符的使用可以让程序和业务变得简单,具备更好的灵活性,本篇将详细介绍下hive中的运算符的使用。

二、hive 运算符分类

Hive支持的运算符可以分为三大类:

  • 关系运算符;
  • 算术运算符;
  • 逻辑运算符;

官方参考文档:官方运算符地址 ,或者使用下面的命令查看hive系统的相关运算符或函数:

-- 1、显示所有的函数和运算符

show functions;

-- 2、查看运算符或者函数的使用说明

describe function count;

-- 3、使用extended 可以查看更加详细的使用说明

describe function extended count;

如下截取了当前版本下hive的部分运算符

三、hive 运算符操作演示

理论是枯燥的,下面通过实际操作来演示下各类运算符的详细使用吧;

3.1  数据准备

在Hive中创建一个空表dual,用于测试各种运算符的功能;

创建表dual

create table dual(id string);

加载一个文件dual.txt到dual表中

dual.txt只有一行内容:内容为一个空格

load data local inpath '/usr/local/soft/hivedata/dual.txt' into table dual;

执行上面的加载命令

模拟测试

select 1+1 from dual;

3.2  关系运算符

关系运算符属于hive的内置运算符,是二元运算符,执行的是两个操作数的比较运算,每个关系运算符都返回boolean类型结果(TRUE或FALSE);

以下是常规的关系运算符:

运算符含义表达式
等值比较= 、==
不等值比较<> 、!=
小于比较<
小于等于比较<=
大于比较>
大于等于比较>=
空值判断 IS NULL 
非空判断 IS NOT NULL
LIKE比较LIKE
JAVA的LIKE操作RLIKE
REGEXP操作REGEXP

is null空值判断

select 1 from dual where 'congge' is null;

 is not null 非空值判断

select 1 from dual where 'congge' is not null;

like使用

  • _表示任意单个字符
  • %表示任意数量字符;
  • 否定比较: NOT A like B;

like单个字符比较

select 1 from dual where 'congge' like 'co_';

可以看到这种情况下没有匹配到结果 

%任意数量字符匹配

select 1 from dual where 'congge' like 'co%';

这个有点像mysql中的like模糊匹配

like否定比较

select 'abcde' like 'abc';
select not 'abcde' like 'abc';

rlike

确定字符串是否匹配正则表达式,是REGEXP_LIKE()的同义词;

select 1 from dual where 'congge' rlike '^c.*e$';
select 1 from dual where '123456' rlike '^\\d+$';  --判断是否全为数字
select 1 from dual where '123456aa' rlike '^\\d+$';

 如果是匹配开始c结尾为e,则能匹配到结果

regexp

功能与rlike相同 用于判断字符串是否匹配正则表达式

select 1 from dual where 'congge' regexp '^c.*e$';

3.3  算术运算符

算术运算符操作数必须是数值类型。 分为一元运算符和二元运算符:

  •  一元运算符,只有一个操作数;
  •  二元运算符有两个操作数,运算符在两个操作数之间;

常用算术运算符:

运算符含义表达式
加减乘除操作+ - * /
取整操作div
取余操作%
位与操作&
位或操作|
位异或操作^
位取反操作 ~

取整操作

 div  给出将A除以B所得的整数部分。例如17 div 3得出5;

取余操作: %  

也叫做取模mod  A除以B所得的余数部分 

位与操作: &

 A和B按位进行与操作的结果, 与表示两个都为1则结果为1

select 4 & 8 from dual;  --4转换二进制:0100 8转换二进制:1000
select 6 & 4 from dual;  --4转换二进制:0100 6转换二进制:0110

位或操作: |

A和B按位进行或操作的结果  或表示有一个为1则结果为1

select 4 | 8 from dual;
select 6 | 4 from dual;

位异或操作: ^

A和B按位进行异或操作的结果 异或表示两者的值不同,则结果为1

select 4 ^ 8 from dual;
select 6 ^ 4 from dual;

3.4  逻辑运算符

逻辑运算符应该算大家很熟悉的一种了,在很多编程语言中需要通过条件判断从而确定是true或者false,就属于逻辑运算符的范畴;

常用逻辑运算符:

运算符含义表达式
与操作A AND B
或操作A OR B
非操作NOT A 、!A
在操作A IN (val1, val2, ...)
不在操作A NOT IN (val1, val2, ...)
逻辑是否存在[NOT] EXISTS (subquery)

与操作: A AND B 

如果A和B均为TRUE,则为TRUE,否则为FALSE。如果A或B为NULL,则为NULL

select 1 from dual where 3>1 and 2>1;

运行结果 

或操作: A OR B  

如果A或B或两者均为TRUE,则为TRUE,否则为FALSE

select 1 from dual where 3>1 or 2!=2;

运行结果

非操作: NOT A 、!A  

如果A为FALSE,则为TRUE;如果A为NULL,则为NULL。否则为FALSE

select 1 from dual where not 2>1;
select 1 from dual where !2=1;

运行结果

 在:A IN (val1, val2, ...)

如果A等于任何值,则为TRUE,这个和mysql中的in的范围查询很类似;

select 1 from dual where 11  in(11,22,33);

运行结果

不在:A NOT IN (val1, val2, ...)

如果A不等于任何值,则为TRUE

select 1 from dual where 11 not in(22,33,44);

运行结果

逻辑是否存在: [NOT] EXISTS (subquery)

将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留;

select A.* from A
where exists (select B.id from B where A.id = B.id);

3.5  其他运算符

字符串拼接函数

select concat()

复杂类型的构造运算符,也可以理解为hive的内置函数

复杂类型的构造运算符

 array使用

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

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

相关文章

Java 19的未来:新特性、性能优化和更多

目录 前言 新特性的引入 1. 模式匹配的扩展 2. 增强的模式匹配异常处理 3. 基于记录的反射 4. 引入静态方法的接口 性能优化 1. 垃圾收集器的改进 2. 即时编译器的增强 3. 并行处理的改进 Java编程的前景展望 1. 更多的应用场景 2. 更强的生态系统 3.…

Hive/SparkSQL中UDF/UDTF/UDAF的含义、区别、有哪些函数

Hive官网&#xff1a;https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF#LanguageManualUDF-Built-inTable-GeneratingFunctions(UDTF) 1.UDF(User-Defined Function) 含义 即用户定义函数&#xff0c;UDF用于处理一行数据并返回一个标量值(单个值)&#x…

【OpenCV】OpenCV:计算机视觉的强大工具库

摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库&#xff0c;为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域&#xff0c;并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV&#xff1f;二、OpenCV的功…

c# 捕获全部线程的异常 试验

1.概要 捕获全部线程的异常 试验&#xff0c;最终结果task的异常没有找到捕获方法 2.代码 2.1.试验1 2.1.1 试验结果 2.2 代码 2.2.1主程序代码 using NLog; using System; using System.Threading; using System.Windows.Forms;namespace 异常监控 {static class Program…

CCNP课程实验-03-Route_Path_Control_CFG

目录 实验条件网络拓朴需求 基础配置需求实现1.A---F所有区用Loopback模拟&#xff0c;地址格式为&#xff1a;XX.XX.XX.XX/32&#xff0c;其中X为路由器编号。根据拓扑宣告进对应协议。A1和A2区为特例&#xff0c;A1&#xff1a;55.55.55.0/24&#xff0c;A2&#xff1a;55.55…

RDS创建数据库

目录 创建数据库 创建账号与授权 连接RDS数据库 创建数据库 在创建数据库的页面&#xff0c;你需要设置数据库的名称、字符集、排序规则等信息。 字符集&#xff1a;字符集&#xff08;Character set&#xff09;是多个字符的集合&#xff0c;字符集种类较多&#xff0c;每个…

typescript,eslint,prettier的引入

typescript 首先用npm安装typescript&#xff0c;cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件&#xff0c;这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项&#xff0c;在该配置项中的目录下&#xff0c;所有的d.ts中的类型可以在…

惠普打印机---共享打印机安装 --连接

1. 远程连接 输入 winR ,再输入共享打印机的连接的IP 2.进入 连接 界面 3.右击打印机 &#xff0c;点击连接 &#xff0c;就可以添加打印机设备 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ba03aea8156642d58982fd2ce0934b45.png 方法二、 添加打印机 2.…

什么是边缘计算:最全指南

什么是边缘计算 边缘计算是一个流行语&#xff0c;如云、物联网和人工智能。简单地说&#xff0c;边缘计算带来了网络的去中心化。边缘计算是即将到来的技术增强和进步。“边缘”一词的字面含义是地球上以分布式方式提供服务的地理位置。 边缘计算是一种分布式计算系统&#…

网络安全法解读之思维导图

一、出台背景 二、法律基础 三、网络安全法架构 1、第一章 总则&#xff08;1-14条&#xff09; 2、第二章 网络安全支持与促进&#xff08;15-20条&#xff09; 3、 第三章 网络运行安全&#xff08;21-39条&#xff09; &#xff08;1&#xff09;第一节 一般规定 &#xf…

leaflet学习笔记-leaflet-ajax获取数据(五)

前言 地图开发中都会用一些GeoJSON数据进行渲染&#xff0c;这是用就会需要加载GeoJSON数据&#xff0c;这时就可以使用leaflet-ajax进行数据的获取 数据准备 本文通过阿里云的地图选择器&#xff08;DataV.GeoAtlas官网&#xff09;可以找到云南省的GeoJSON数据&#xff0c…

【C++杂货铺】C++11新特性——可变参数模板

文章目录 一、可变模板参数相关概念的引入二、获取参数包中参数的个数三、递归函数方式展开参数包四、逗号表达式展开参数包五、可变模板参数的实际应用——emplace相关接口5.1 回顾一下 push_back 的三种用法5.2 emplace_back 使用方法介绍5.3 听说 emplace_back 可以提高效率…

MAC电脑安装java开发工具

一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…

字符串 (5)--- 后缀数组(倍增思想求解)

字符串下标从 1 开始。 字符串 s 的长度为 n。 " 后缀 i" 代指以第 i 个字符开头的后缀&#xff0c;存储时用 i 代表字符串 s 的后缀 s[i ... n]。 后缀数组&#xff08;Suffix Array&#xff09;主要关系到两个数组&#xff1a;sa 和 rk。 后缀数组sa&#xff0c;s…

python基础-01

文章目录 前言一、python中的注释二、变量的数据类型1.Number&#xff08;数字&#xff09;2.Boolean&#xff08;布尔类型&#xff09;—— True 和 False3.String&#xff08;字符串&#xff09;4.List&#xff08;列表&#xff09;5.Tuple&#xff08;元组&#xff09;6.Dic…

详解动态顺序表

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

前端:html+css+js实现CSDN首页

提前说一下&#xff0c;只实现了部分片段哈&#xff01;如下&#xff1a; 前端&#xff1a;htmlcssjs实现CSDN首页 1. 实现效果2. 需要了解的前端知识3. 固定定位的使用4. js 监听的使用4. 参考代码和运行结果 1. 实现效果 我的实现效果为&#xff1a; 原界面如下,网址为&…

LLM Agent零微调范式 ReAct Self Ask

前三章我们分别介绍了思维链的使用&#xff0c;原理和在小模型上的使用。这一章我们正式进入应用层面&#xff0c;聊聊如何把思维链和工具使用结合得到人工智能代理。 要回答我们为什么需要AI代理&#xff1f;代理可以解决哪些问题&#xff1f;可以有以下两个视角 首先是我们…

三层架构概述

三层架构就是把整个软件的代码分为三个层次&#xff0c;分层的目的是&#xff1a;规范代码&#xff0c;大型软件需要团队配合的时候问题就来了&#xff0c;由于每个程序员风格不一样&#xff0c;而开发软件大量的代码风格不统一就会造成后期调试和维护出现问题&#xff0c;然而…

Squid 代理服务器

13.1.1缓存代理概述 作为应用层的代理服务软件&#xff0c;Squid主要提供缓存加速、应用层过滤控制的功能。 1.代理的工作机制 当客户机通过代理来请求Web页面时&#xff0c;指定的代理服务器会先检查自己的缓存&#xff0c;如果缓存中已 经有客户机需要的页面&#xff0c;则直…