【大数据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使用

相关推荐

  1. 使用Apache Hive进行数据分析的关键配置详解

    2024-01-02 08:16:01       46 阅读
  2. HIVE 数据学习

    2024-01-02 08:16:01       46 阅读
  3. 数据技术】Hive基本原理以及使用教程

    2024-01-02 08:16:01       44 阅读
  4. 数据Hive 快速搭建的详细步骤

    2024-01-02 08:16:01       42 阅读
  5. Spark数据处理 掌握Scala运算符

    2024-01-02 08:16:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 08:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 08:16:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 08:16:01       82 阅读
  4. Python语言-面向对象

    2024-01-02 08:16:01       91 阅读

热门阅读

  1. python3使用sqlite3构建本地持久化缓存

    2024-01-02 08:16:01       60 阅读
  2. 【PostgreSQL】从零开始:(四十二)系统列

    2024-01-02 08:16:01       49 阅读
  3. 怎么获取客户端真实IP?GO

    2024-01-02 08:16:01       61 阅读
  4. django静态文件命名空间

    2024-01-02 08:16:01       58 阅读
  5. Django通用视图

    2024-01-02 08:16:01       51 阅读
  6. iostat获取IO延迟单位从ms调整us的方案

    2024-01-02 08:16:01       57 阅读
  7. 微信小程序如何分包管理

    2024-01-02 08:16:01       55 阅读