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

【大数据Hive】hive 运算符使用详解,第1张

目录

一、前言

二、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】hive 运算符使用详解,第2张

三、hive 运算符 *** 作演示

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

3.1  数据准备

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

创建表dual

create table dual(id string);

【大数据Hive】hive 运算符使用详解,第3张

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

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

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

执行上面的加载命令

【大数据Hive】hive 运算符使用详解,第4张

模拟测试

select 1+1 from dual;

【大数据Hive】hive 运算符使用详解,第5张

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;

【大数据Hive】hive 运算符使用详解,第6张

 is not null 非空值判断

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

【大数据Hive】hive 运算符使用详解,第7张

like使用

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

like单个字符比较

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

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

【大数据Hive】hive 运算符使用详解,第8张

%任意数量字符匹配

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

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

【大数据Hive】hive 运算符使用详解,第9张

like否定比较

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

【大数据Hive】hive 运算符使用详解,第10张

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+$';

【大数据Hive】hive 运算符使用详解,第11张

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

【大数据Hive】hive 运算符使用详解,第12张

regexp

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

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

【大数据Hive】hive 运算符使用详解,第13张

3.3  算术运算符

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

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

常用算术运算符:

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

取整 *** 作

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

【大数据Hive】hive 运算符使用详解,第14张

取余 *** 作: %  

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

【大数据Hive】hive 运算符使用详解,第15张

位与 *** 作: &

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

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

【大数据Hive】hive 运算符使用详解,第16张

位或 *** 作: |

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

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

【大数据Hive】hive 运算符使用详解,第17张

位异或 *** 作: ^

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

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

【大数据Hive】hive 运算符使用详解,第18张

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;

运行结果 

【大数据Hive】hive 运算符使用详解,第19张

或 *** 作: A OR B  

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

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

运行结果

【大数据Hive】hive 运算符使用详解,第20张

非 *** 作: 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;

运行结果

【大数据Hive】hive 运算符使用详解,第21张

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

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

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

运行结果

【大数据Hive】hive 运算符使用详解,第22张

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

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

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

运行结果

【大数据Hive】hive 运算符使用详解,第23张

逻辑是否存在: [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的内置函数

复杂类型的构造运算符

【大数据Hive】hive 运算符使用详解,第24张

 array使用

【大数据Hive】hive 运算符使用详解,第25张

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/13518167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024-01-05
下一篇 2024-01-10

发表评论

登录后才能评论

评论列表(0条)

保存