本章介绍Hive的内置运算符. Hive中有四种类型的运算符:
关系运算符
算术运算符
逻辑运算符
复杂运算符
这些运算符用于比较两个操作数.下表描述了Hive中可用的关系运算符:
运算符 | 操作数 | 描述 |
---|---|---|
A = B | 所有原始类型 | 如果表达式A等于表达式B则为TRUE,否则为FALSE . |
A!= B | 所有原始类型 | 如果表达式A不等于表达式B则为TRUE,否则为FALSE. |
A< B | 所有原始类型 | 如果表达式A小于表达式B则为TRUE,否则为FALSE. |
A< = B | 所有原始类型 | 如果表达式A较少则为TRUE或等于表达式B,否则为FALSE. |
A> B | 所有基本类型 | 如果表达式A大于表达式B则为TRUE,否则为FALSE. |
A> = B | 所有原始类型 | 如果表达式A更大,则为TRUE或等于表达式B,否则为FALSE. |
一个IS NULL | 全部types | 如果表达式A的计算结果为NULL,则为TRUE,否则为FALSE. |
A IS NOT NULL | 所有类型 | 如果表达式A的计算结果为NULL,则为FALSE,否则为TRUE. |
A LIKE B | 字符串 | 如果字符串模式A与B匹配则为TRUE,否则为FALSE./td> |
A RLIKE B | 字符串 | 如果A或B为NULL,则为NULL;如果A的任何子字符串与Java正则表达式B匹配,则为TRUE,否则为FALSE. |
A REGEXP B | 字符串 | 与RLIKE相同. |
我们假设员工表由名为的字段组成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 | +-----+-----------+-----------+----------------------------------+
执行以下查询以检索其薪水的员工详细信息大于或等于400卢比.
hive> SELECT * FROM employee WHERE Salary> = 40000;
成功执行查询后,您会看到以下响应:
+ ----- + ------------ + -------- + ------------------ ---------- + ------ + | ID |名称|薪水|指定|部门| + ----- + ------------ + -------- + ----------------- ----------- + ------ + | 1201 | Gopal | 45000 |技术经理| TP | | 1202 | Manisha | 45000 |校对员|公关| | 1203 | Masthanvali | 40000 |技术作家| TP | | 1204 | Krian | 40000 |人力资源管理员|人力资源| + ----- + ------------ + -------- + ----------------- ----------- + ------ +
这些运算符支持对操作数的各种常见算术运算.所有这些都返回数字类型.下表描述了Hive中可用的算术运算符:
运算符 | 操作数 | 描述 |
---|---|---|
A + B | 所有数字类型 | 给出添加A和B的结果. |
A - B | 所有数字类型 | 给出从A中减去B的结果. |
A * B | 所有数字类型 | 给予乘以A和B的结果. |
A/B | 所有数字类型 | 给出除以A的结果. |
A%B | 所有数字类型 | 给出A除以B得到的提示. |
A& B | 所有数字类型 | 给出A和B的按位AND结果. |
A | B | 所有数字类型 | 给出A和B的按位OR结果. |
A ^ B | 所有数字类型 | 给出A的按位XOR结果B. |
~A | 所有数字类型 | 给出按位NOT的结果. |
以下查询添加两个数字,20和30.
hive> SELECT 20 + 30 ADD FROM temp;
成功执行查询后,您会看到以下回复:
+--------+ | ADD | +--------+ | 50 | +--------+
运算符是逻辑表达式.所有这些都返回TRUE或FALSE.
运算符 | 操作数 | 描述 |
---|---|---|
A AND B | boolean | 如果A和B都为TRUE,则为TRUE,否则为FALSE. |
A&& B | boolean | 与A AND B相同. |
A OR B | boolean | 如果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>并且键具有类型K | 它返回与地图中的键对应的值. |
Sx | S是结构 | 它返回S的x字段. |