- Hive 教程
- Hive - 首页
- Hive - 简介
- Hive - 安装
- Hive - 数据类型
- Hive - 创建数据库
- Hive - 删除数据库
- Hive - 创建表
- Hive - 修改表
- Hive - 删除表
- Hive - 分区
- Hive - 内置运算符
- Hive - 内置函数
- Hive - 视图和索引
- HiveQL
- HiveQL - Select Where
- HiveQL - Select Order By
- HiveQL - Select Group By
- HiveQL - Select Joins
- Hive 有用资源
- Hive - 问题与解答
- Hive - 快速指南
- Hive - 有用资源
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,则为 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 | 所有数字类型 | 给出从 A 中除以 B 的结果。 |
| 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 | 布尔值 | 与 A OR B 相同。 |
| NOT A | 布尔值 | 如果 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 | +------+--------------+-------------+-------------------+--------+
复杂运算符
这些运算符提供了一个表达式来访问复杂类型的元素。
| 运算符 | 操作数 | 描述 |
|---|---|---|
| A[n] | A 是一个数组,n 是一个整数 | 它返回数组 A 中的第 n 个元素。第一个元素的索引为 0。 |
| M[key] | M 是一个 Map<K, V>,key 的类型为 K | 它返回映射中对应于键的值。 |
| S.x | S 是一个结构体 | 它返回 S 的 x 字段。 |
广告