示例数据
- 表
员工表:emp
字段
empno :员工编号
ename :员工姓名
job :职位
mgr :上级
hiredate :入职日期
sal :工资
comm :奖金
deptno :部门编号
create table IF NOT EXISTS emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' stored as textfile;
部门表:
字段
deptno :部门编号
dname :部门名称
loc :地址
create table IF NOT EXISTS default.dept(
deptno int,
dname string,
loc string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
- 数据
员工数据:
7499 ALLEN SALESMAN 7698 1981-02-20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-02-22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-04-02 2975.0 0.0 20
7654 MARTIN SALESMAN 7698 1981-09-28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-05-01 2850.0 0.0 30
7782 CLARK MANAGER 7839 1981-06-09 2450.0 0.0 10
7788 SCOTT ANALYST 7566 1987-07-13 3000.0 0.0 20
7839 KING PRESIDENT NULL 1981-11-07 5000.0 0.0 10
7844 TURNER SALESMAN 7698 1981-09-08 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-07-13 1100.0 0.0 20
7900 JAMES CLERK 7698 1981-12-03 950.0 0.0 30
7902 FORD ANALYST 7566 1981-12-03 3000.0 0.0 20
7934 MILLER CLERK 7782 1982-01-23 1300.0 0.0 10
部门数据:
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 加载数据
# 加载员工数据
load data local inpath '/root/empdata' overwrite into table emp;
# 加载部门数据
load data local inpath '/root/deptdata' overwrite into table dept ;
一、算术运算符
这些运算符支持的操作数各种常见的算术运算。所有这些返回数字类型。下表描述了在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 |
+--------+
二、关系运算符
运算符 | 操作 | 描述 |
---|---|---|
A = B | 所有基本类型 | 如果表达A等于表达B,结果TRUE ,否则FALSE。 |
A != B | 所有基本类型 | 如果A不等于表达式B表达返回TRUE ,否则FALSE。 |
A < B | 所有基本类型 | TRUE,如果表达式A小于表达式B,否则FALSE。 |
A <= B | 所有基本类型 | TRUE,如果表达式A小于或等于表达式B,否则FALSE。 |
A > B | 所有基本类型 | TRUE,如果表达式A大于表达式B,否则FALSE。 |
A >= B | 所有基本类型 | TRUE,如果表达式A大于或等于表达式B,否则FALSE。 |
<> | ||
A IS NULL | 所有类型 | TRUE,如果表达式的计算结果为NULL,否则FALSE。 |
A IS NOT NULL | 所有类型 | FALSE,如果表达式A的计算结果为NULL,否则TRUE。 |
A LIKE B | 字符串 | TRUE,如果字符串模式A匹配到B,否则FALSE。 |
A RLIKE B | 字符串 | NULL,如果A或B为NULL;TRUE,如果A任何子字符串匹配Java正则表达式B;否则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;
查询执行以检索薪水大于或等于40000卢比的雇员的详细信息。
hive> SELECT * FROM employee WHERE Salary>=40000;
NULL
hive> select 1 from dual where null is null;
hive> select 1 from dual where null is not null;
LIKE
'%
_
RLIKE
A RLIKE B ,表示B是否在A里面即可。而A LIKE B,则表示B是否是A.
0: jdbc:hive2://192.168.71.130:10000> select 'footbar' rlike '^f..]+r$';
OK
+--------+
| _c0 |
+--------+
| false |
+--------+
1 row selected (1.834 seconds)
0: jdbc:hive2://192.168.71.130:10000> select 'footbar' rlike '^f.*r$';
OK
+-------+
| _c0 |
+-------+
| true |
+-------+
三、逻辑运算符
运算符是逻辑表达式。所有这些返回TRUE或FALSE。
运算符 | 操作 | 描述 |
---|---|---|
A AND B | boolean | TRUE,如果A和B都是TRUE,否则FALSE。 |
A && B | boolean | 类似于 A AND B. |
A OR B | boolean | TRUE,如果A或B或两者都是TRUE,否则FALSE。 |
A || B | boolean | 类似于 A OR B. |
NOT A | boolean | TRUE,如果A是FALSE,否则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 |
+------+--------------+-------------+-------------------+--------+
通过参数hive.cli.print.header可以控制在cli中是否显示表的列名。
set hive.cli.print.header=true;
and or 优先级
数据:
id 员工编号
money 工资
type 表示
求编号1001与1002,工资等于100的记录。
select id,money
from winfunc
where id='1001' or id='1002' and
money ='100'
四、复杂的运算符
这些运算符提供一个表达式来接入复杂类型的元素。
运算符 | 操作 | 描述 |
---|---|---|
A[n] | A是一个数组,n是一个int | 它返回数组A的第n个元素,第一个元素的索引0。 |
hive> select t[0] from udftest;
M[key] M 是一个 Map<K, V> 并 key 的类型为K 它返回对应于映射中关键字的值。
hive> select t['100'] from udftest;
S.x S是一个结构 它返回S的s字段
创建表--使用map函数
hive> create table udftest as select map('100', 'tom', '200', 'mary') as t from dual;
查看表:
hive> select t from udftest;
网友评论