Hive - 内置运算符
本章介绍 Hive 的内置运算符。Hive 中有四种类型的运算符:
- 关系运算符
- 算术运算符
- 逻辑运算符
- 复杂运算符
关系运算符
这些运算符用于比较两个操作数。下表介绍了 Hive 中可用的关系运算符:
运算符 | 操作数 | 描述 |
---|---|---|
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,如果 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 中可用的算术运算符:
运算符 | 操作数 | 描述 |
---|---|---|
A + B | 所有数字类型 | 给出 A 和 B 相加的结果。 |
A - B | 所有数字类型 | 给出从 A 中减去 B 的结果。 |
A * B | 所有数字类型 | 给出 A 和B。 |
A / B | 所有数字类型 | 给出 B 除以 A 的结果。 |
A % B | 所有数字类型 | 给出 A 除以 B 所得的余数。 |
A & B | 所有数字类型 | 给出 A 和 B 按位与的结果。 |
A | B | 所有数字类型 | 给出 A 和 B 按位或的结果。 |
A ^ B | 所有数字类型 | 给出 A 和 B 按位异或的结果。 |
~A | 所有数字类型 | 给出 A 按位非的结果。 |
示例
以下查询将两个数字 20 和 30 相加。
hive> SELECT 20+30 ADD FROM temp;
成功执行查询后,您将看到以下响应:
+--------+ | ADD | +--------+ | 50 | +--------+
逻辑运算符
运算符是逻辑表达式。它们都返回 TRUE 或 FALSE。
运算符 | 操作数 | 描述 |
---|---|---|
A AND B | 布尔值 | 如果 A 和 B 都为 TRUE,则为 TRUE,否则为 FALSE。 |
A && B | 布尔值 | 与 A AND B 相同。 |
A OR B | 布尔值 | 如果 A 或 B 或两者都为 TRUE,则为 TRUE,否则为 FALSE。 |
A || B | boolean | 与 A OR B 相同。 |
NOT A | boolean | 如果 A 为 FALSE,则为 TRUE,否则为 FALSE。 |
!A | boolean | 与 NOT A 相同。 |
示例
以下查询用于检索部门为 TP 且薪水超过 40000 卢比的员工详细信息。
hive> SELECT * FROM employee WHERE Salary>40000 && Dept=TP;
成功执行查询后,您将看到以下响应:
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | +------+--------------+-------------+-------------------+--------+
复杂运算符
这些运算符提供表达式来访问复杂类型的元素。
运算符 | 操作数 | 描述 |
---|---|---|
A[n] | A 是一个数组,n 是一个 int | 它返回数组 A 中的第 n 个元素。第一个元素的索引为 0。 |
M[key] | M 是一个 Map<K, V>并且 key 的类型为 K | 它返回与映射中的 key 对应的值。 |
S.x | S 是一个结构体 | 它返回 S 的 x 字段。 |