Hive|Spark 函数详解

本文详细介绍了Hive和Spark中的基本比较运算函数(=, ==, !=, <>, <=, >=, BETWEEN, IS NULL, IN, AND, ANY)以及数学运算(+,-,*,/,类型转换),包括NULL处理和类型转换规则,同时涵盖了位运算、聚合函数、日期函数和数组操作等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持续更新…

基本比较运算函数

注意: 在比较比较运算函数中, 对于一些可能存在为 NULL 的情况, 一定要增加逻辑判断和处理

=、==

expr1 = expr2 - 如果 expr1 equals expr2 则返回 true , 否则返回 false

① 为 NULL 的情况

如果 expr1expr2 任意一个或两个都为 NULL ,则返回结果一定为 NULL

② 类型转换

expr1expr2 必须为相同的类型或者可以转换成公共的的类型, 而且必须是可以在相等比较中使用的类型. Map 类型目前不支持. 对于 array | struct 等复杂类型,字段的数据类型必须是可以排序的.

-- 比较相同类型,且都不为 NULL
> SELECT 2 = 2;
 true
-- 比较不同的类型, 但是可以转换为公共的类型
> SELECT 1 = '1';
 true
-- expr1 和 expr2 为 NULL 的情况, 只有有 NULL , 则一定返回 NULL
> SELECT true = NULL;
 NULL
> SELECT NULL = NULL;
 NULL

试一下 array 类型, 这里需要注意一下

-- 我们创建两个数组(元素相同,但是顺序不同), 然后进行比较,
> SELECT array(1,2,3) = array(3,2,1);
 FALSE

在这里插入图片描述

-- 我们创建两个数组(元素相同,顺序相同), 然后进行比较,
> SELECT array(1,2,3) = array(3,2,1);
 TRUE

在这里插入图片描述

!

! expr - 逻辑非

-- 只有这三种情况
> SELECT ! true;
 false
> SELECT ! false;
 true
> SELECT ! NULL;
 NULL
!=、<>

说明:在 SPARKHIVE 中, <>!= 的用法相同

expr1 != expr2 - 如果 expr1 not equals expr2 则返回 true , 否则返回 false. 和 = 的情况相反

① 注意数据为 NULL 的情况, 参考 =

② 注意类型转换的情况, 参考 =

> SELECT 1 != 2;
 true
> SELECT 1 != '2';
 true
> SELECT true != NULL;
 NULL
> SELECT NULL != NULL;
 NULL

在这里插入图片描述

<=>

expr1 <=> expr2 - 在 expr1expr2 都不为 NULL 的情况下, 用法和 = 相同; 如果 expr1expr2 都为 NULL 返回 true , 如果 expr1expr2 任意一个为 NULL , 则返回 NULL

① 注意数据为 NULL 的情况, 参考 =

② 注意类型转换的情况, 参考 =

> SELECT 2 <=> 2;
 true
> SELECT 1 <=> '1';
 true
> SELECT true <=> NULL;
 false
> SELECT NULL <=> NULL;
 true
<、<=

expr1 < expr2 - 如果 expr1 小于 expr2 则返回 true , 否则返回 false

expr1 <= expr2 - 如果 expr1 小于等于 expr2 则返回 true , 否则返回 false

① 注意数据为 NULL 的情况, 参考 =

② 注意类型转换的情况, 参考 =

> SELECT 1 < 2;
 true
> SELECT 1.1 < '1';
 false
> SELECT to_date('2009-07-30 04:17:52') < to_date('2009-07-30 04:17:52');
 false
> SELECT to_date('2009-07-30 04:17:52') < to_date('2009-08-01 04:17:52');
 true
> SELECT 1 < NULL;
 NULL
> SELECT '1' < 1;
 true
>、>=

expr1 > expr2 - 如果 expr1 大于 expr2 则返回 true , 否则返回 false

expr1 >= expr2 - 如果 expr1 大于等于 expr2 则返回 true , 否则返回 false

① 注意数据为 NULL 的情况, 参考 =

② 注意类型转换的情况, 参考 =

> SELECT 2 > 1;
 true
> SELECT 2 > '1.1';
 true
> SELECT to_date('2009-07-30 04:17:52') > to_date('2009-07-30 04:17:52');
 false
> SELECT to_date('2009-07-30 04:17:52') > to_date('2009-08-01 04:17:52');
 false
> SELECT 1 > NULL;
 NULL

特殊比较运算函数

BETWEEN

expr1 [NOT] BETWEEN expr2 AND expr3 - 计算如果 expr1 是否在 expr2 和 expr3 之间的范围内; 使用 NOT 关键字可以实现相反的效果

-- 计算 1, 3, 5, 7 在 2 和 5 之间的元素(该示例为 spark 语法)
> SELECT col1 FROM VALUES 1, 3, 5, 7 WHERE col1 BETWEEN 2 AND 5;
 3
 5

-- 计算 1, 2, 3, 4 在 2 和 4 之间的元素(spark 和 hive 都支持)
> WITH t AS
(
    select 1 as id
    UNION ALL
    select 2 as id
    UNION ALL
    select 3 as id
    UNION ALL
    select 4 as id
)
select id
from t
where id between 2 and 4;

在这里插入图片描述
我们试试当数据中存在为 NULL 的情况


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值