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

news2024/11/28 17:49:32

目录

一、前言

二、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.coloradmin.cn/o/1348851.html

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

相关文章

Airtest的iOS实用接口介绍

前段时间Airtest更新了1.3.0.1版本&#xff0c;里面涉及非常多的iOS功能新增和改动&#xff0c;今天想详细跟大家聊一下里面的iOS设备接口。 PS&#xff1a;本文示例均使用本地连接的iOS设备&#xff0c;Airtest版本为1.3.0.1 。 安装接口&#xff1a;install、install_app …

互联网大厂面试题目

阿里篇 1.1.1 如何实现一个高效的单向链表逆序输出&#xff1f; 1.1.2 已知sqrt(2)约等于1.414&#xff0c;要求不用数学库&#xff0c;求sqrt(2)精确到小数点后10位 1.1.3 给定一个二叉搜索树(BST)&#xff0c;找到树中第 K 小的节点 1.1.4 LRU缓存机制 1.1.5 关于epoll和…

UG装配-接触对齐

UG装配约束命令在如下位置 首选接触&#xff1a;含接触和对齐&#xff0c;自动判断两种类型 接触&#xff1a;约束对象使其曲面法向在相反方向&#xff0c;并共面或共线 对齐&#xff1a;约束对象使其曲面法向在同一方向&#xff0c;并共面或共线 自动判断中心/轴&#xff1…

innovus:refresh CTS

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 调试CTS spec过程中&#xff0c;如果对CTS结果不满意&#xff0c;需要重新做CTS&#xff0c;有没有办法不退出工具&#xff0c;不用重新启动placemen database重新做CTS吗&…

爬取豆瓣电影评论内容、星级、评论时间、支持人数

大家好&#xff0c;我是带我去滑雪&#xff0c;每天教你一个小技巧&#xff01; 本期爬取豆瓣电影评论人、评论时间、星级、支持人数、评论内容。话不多说&#xff0c;直接上代码&#xff1a; import requests from bs4 import BeautifulSoup import pandas as pd import time…

Node.js+Express+Mysql 极简代码实现对数据库增删改查的Restful API服务

确保已安装node 创建项目文件夹&#xff0c;并初始化 npm init -y 安装express ​npm install express 安装mysql npm install mysql 安装body-parser npm install body-parser 新建db/mysql.js const mysql require(mysql);let db mysql.createConnection({host: …

如何解决企业内部FTP文件传输速度过慢和安全问题

在数据化时代里&#xff0c;企业内部的文件传输永远是刚需&#xff0c;而因为 FTP协议的简单、易用、广泛支持等优点&#xff0c;让很多企业早期都普遍使用&#xff0c;随着数量量的增多&#xff0c;和对安全的要求越来越高&#xff0c;FTP也暴露出了一些列问题&#xff0c;小编…

软件测试/测试开发丨Linux 三剑客与管道使用

1、 程序运行环境输入与输出 标准输入 0 read a;echo $a标准输出 1 echo ceshiren.com错误输出 ls not_exist_dir 2、 管道重定向 管道与管道之间可以重定向管道与文件之间可以重定向 echo 11 > /tmp/1 read var </tmp/1错误输出&#xff1a; ls not_exist_dir > /…

【华为机试】2023年真题B卷(python)-喊七的次数重排

一、题目 题目描述&#xff1a; 喊7是一个传统的聚会游戏&#xff0c;N个人围成一圈&#xff0c;按顺时针从1到N编号。 编号为1的人从1开始喊数&#xff0c;下一个人喊的数字为上一个人的数字加1&#xff0c;但是当将要喊出来的数字是7的倍数或者数字本身含有7的话&#xff0c;…

第一节 初始化项目

系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”&#xff0c;复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…

Pearson correlation coefficient (Pearson’s r) 皮尔森相关系数

此图用的是箱状图&#xff0c;的纵轴是“Pearson’s r”&#xff0c;是实际观测值与机器学习模型预测值之间的相关性 Pearsons f得分&#xff0c;它是一个统计量&#xff0c;用来衡量两个变量之间线性相关性的强度。这个得分可能是用来衡量实际观测值与机器学习模型预测值之间的…

Pycharm 切换interpreter---python的环境和第三方库问题

这篇回答两个问题&#xff1a; 1.为什么在 pycharm中打开新的project&#xff0c;切换interpreter 之后发现自己之前装的库消失了&#xff1f; 2.为什么 interpreter 切换到python3.8了&#xff0c; terminal 还是在 3.9&#xff1f;&#xff1f; 问题的关键&#xff1a;搞懂什…

自定义富集分析结果的term顺序

大家好&#xff0c;元旦过得还好吗&#xff1f;之前我们聊过如果富集分析结果不理想&#xff0c;如何选择富集分析的terms&#xff0c;如果不记得&#xff0c;可以看看这三个推文和视频。 ​富集分析结果不理想&#xff1a;如何从上千个term中找到自己想要所有term&#xff1f;…

AD教程 (二十一)模块化布局规划

AD教程 &#xff08;二十一&#xff09;模块化布局规划 原理图是按照我们的功能模块去进行排布划分的 利用交叉选择模式分屏快速进行模块化布局 分屏&#xff0c;选中任意文档&#xff0c;右击&#xff0c;点击垂直分割 交叉选择模式&#xff0c;点击工具&#xff0c;交叉选…

C++/CLI——2类和对象生存期

C/CLI——2函数与类的使用方法 函数使用 定义函数和使用函数基本与C#相同&#xff0c;只不过C/CLI可以像标准C一样&#xff0c;可以先声明函数原型&#xff0c;再定义函数主体。值得注意的是&#xff0c;如果有默认参数&#xff0c;只能在函数原型中定义&#xff0c;不能在函…

SpringBoot 请求参数

文章目录 一、简单参数实体参数数组集合参数日期参数Json参数路径参数 一、简单参数 原始方式 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 SpringBoot方式 1.参数名与形参变量名相同&#xff0c;定义形参即可接收参数。…

紫光展锐5G扬帆出海 | 东南亚成为5G新热土

东南亚是一块充满活力和潜力的市场&#xff0c;这里人口基数大、年轻消费群体占比高&#xff0c;电子市场在过去几年显著增长。 增速“狂飙”的东南亚手游 近年来&#xff0c;东南亚手游下载量逐年增长&#xff0c;2023 年第一季度下载量突破 21 亿次&#xff0c;贡献了全球近…

QT上位机开发(带配置文件的倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们用qt写过倒计时软件&#xff0c;但是那个时候界面只有分钟和秒钟&#xff0c;这一次我们希望在之前的基础上拓展一下。第一&#xff0c;可…

【数据结构——图】图的最短路径(头歌习题)【合集】

目录 第1关&#xff1a;单源最短路径完整代码 第2关&#xff1a;多源最短路径输入格式:输出格式:完整代码 第1关&#xff1a;单源最短路径 给一个n(1 ≤ n ≤ 2500) 个点 m(1 ≤ m ≤ 6200) 条边的无向图&#xff0c;求 s 到 t 的最短路。 输入格式: 第一行四个由空格隔开的整…

二叉堆的简单板子+理解+例题

首先&#xff0c;我们先要了解堆是什么&#xff1f; 堆&#xff1a;是一种高级树状数据结构&#xff0c;是一种完全二叉树。 &#xff08;完全二叉树指的是&#xff0c;除了叶子节点&#xff0c;每个节点均有左右两个子节点的树状结构&#xff09; 而&#xff0c;二叉堆是堆的最…