Hive 内置运算符
本章解释了 Hive 的内置操作符。 Hive 中有四种操作符:
关系运算符
算术运算符
逻辑运算符
复合运算符
关系运算符
这些运算符用于比较两个操作数。下表描述了 Hive 中可用的关系运算符:
Operator |
Operand |
说明 |
A = B |
所有原始类型 |
如果表达式 A 与表达式 B 等效,则为 TRUE,否则为 FALSE。 |
A != B |
所有原始类型 |
如果表达式 A 不等于表达式 B 则为 TRUE,否则为 FALSE。 |
A < B |
所有原始类型 |
如果表达式 A 小于表达式 B,则为 TRUE,否则为 FALSE。 |
A <= B |
所有原始类型 |
如果表达式 A 小于或等于表达式 B,则为 TRUE,否则为 FALSE。 |
A > B |
所有原始类型 |
如果表达式 A 大于表达式 B,则为 TRUE,否则为 FALSE。 |
A >= B |
所有原始类型 |
如果表达式 A 大于或等于表达式 B,则为 TRUE,否则为 FALSE。 |
A IS NULL |
所有类型 |
如果表达式 A 的计算结果为 NULL,则为 TRUE,否则为 FALSE。 |
A IS NOT NULL |
所有类型 |
如果表达式 A 的计算结果为 NULL,则为 FALSE,否则为 TRUE。 |
A LIKE B |
字符串 |
如果字符串模式 A 与 B 匹配,则为 TRUE,否则为 FALSE。 |
A RLIKE B |
字符串 |
如果 A 或 B 为 NULL,则为 NULL,如果 A 的任何子字符串与 Java 正则表达式 B 匹配,则为 TRUE,否则为 FALSE。 |
A REGEXP B |
字符串 |
与RLIKE相同。 |
示例
让我们假设
employee 表由名为 Id、Name、Salary、Designation 和 Dept 的字段组成,如下所示。生成查询以检索 ID 为 1205 的员工详细信息。
+-----+--------------+--------+---------------------------+------+
| Id | Name | Salary | Designation | Dept |
+-----+--------------+------------------------------------+------+
|1201 | Gopal | 45000 | Technical manager | TP |
|1202 | Manisha | 45000 | Proofreader | PR |
|1203 | Masthanvali | 40000 | Technical writer | TP |
|1204 | Krian | 40000 | Hr Admin | HR |
|1205 | Kranthi | 30000 | Op Admin | Admin|
+-----+--------------+--------+---------------------------+------+
执行以下查询以使用上表检索员工详细信息:
hive> SELECT * FROM employee WHERE Id=1205;
成功执行查询后,您将看到以下响应:
+-----+-----------+-----------+----------------------------------+
| ID | Name | Salary | Designation | Dept |
+-----+---------------+-------+----------------------------------+
|1205 | Kranthi | 30000 | Op Admin | Admin |
+-----+-----------+-----------+----------------------------------+
执行以下查询以检索薪水大于或等于 40000 卢比的员工详细信息。
hive> SELECT * FROM employee WHERE Salary>=40000;
成功执行查询后,您将看到以下响应:
+-----+------------+--------+----------------------------+------+
| ID | Name | Salary | Designation | Dept |
+-----+------------+--------+----------------------------+------+
|1201 | Gopal | 45000 | Technical manager | TP |
|1202 | Manisha | 45000 | Proofreader | PR |
|1203 | Masthanvali| 40000 | Technical writer | TP |
|1204 | Krian | 40000 | Hr Admin | HR |
+-----+------------+--------+----------------------------+------+
算术运算符
这些运算符支持对操作数进行各种常见的算术运算。它们都返回数字类型。下表描述了 Hive 中可用的算术运算符:
Operator |
操作数 |
说明 |
A + B |
所有数字类型 |
给出 A 和 B 相加的结果 |
A-B |
所有数字类型 |
给出从 A 中减去 B 的结果。 |
A * B |
所有数字类型 |
给出 A 和 B 相乘的结果。 |
A/B |
所有数字类型 |
给出 B 与 A 相除的结果。 |
A % B |
所有数字类型 |
给出将 A 除以 B 的提示。 |
A & B |
所有数字类型 |
给出 A 和 B 的按位 AND 的结果。 |
A |乙 |
所有数字类型 |
给出 A 和 B 的按位 OR 的结果。 |
A ^ B |
所有数字类型 |
给出 A 和 B 按位异或的结果。 |
~A |
所有数字类型 |
给出 A 的按位非结果。 |
示例
以下查询将两个数字相加,20 和 30。
hive> SELECT 20+30 ADD FROM temp;
成功执行查询后,您将看到以下响应:
+--------+
| ADD |
+--------+
| 50 |
+--------+
逻辑运算符
运算符是逻辑表达式。它们都返回 TRUE 或 FALSE。
Operator |
Operand |
说明 |
A 和 B |
布尔值 |
如果 A 和 B 都为 TRUE,则为 TRUE,否则为 FALSE。 |
A && B |
布尔值 |
与 A AND B 相同。 |
A 或 B |
布尔值 |
如果 A 或 B 或两者都为 TRUE,则为 TRUE,否则为 FALSE。 |
A ||乙 |
布尔值 |
与 A OR B 相同。 |
不是 |
布尔值 |
如果 A 为 FALSE,则为 TRUE,否则为 FALSE。 |
!A |
布尔值 |
与 NOT A 相同。 |
示例
以下查询用于检索部门为 TP 且薪水超过 40000 卢比的员工详细信息。
hive> SELECT * FROM employee WHERE Salary>40000 && Dept=TP;
成功执行查询后,您将看到以下响应:
+------+--------------+-------------+-------------------+--------+
| ID | Name | Salary | Designation | Dept |
+------+--------------+-------------+-------------------+--------+
|1201 | Gopal | 45000 | Technical manager | TP |
+------+--------------+-------------+-------------------+--------+
复杂运算符
这些运算符提供了访问复杂类型元素的表达式。
Operator |
Operand |
说明 |
A[n] |
A 是一个数组,n 是一个整数 |
它返回数组 A 中的第 n 个元素。第一个元素的索引为 0。 |
M[key] |
M 是 Map
并且键的类型为 K
|
返回map中key对应的值。 |
S.x |
S 是一个结构体 |
返回S的x字段 |