文章目录
- 一、join关联小案例
- 1.1 Linux下建相应目录
- 1.2 导入文件
- 1.3 执行hive脚本
- 1.4 查看数据库以及表是否创建成功
- 1.5 查询内容,做关联
- 二、map join(hive中这个机制自动的)
- 三、union
- 四、装载数据 insert
- 五、将数据插入/导出到文件(insert)
- 六、数据交换(import/export)
- 6.1 使用EXPORT导出数据
- 6.2 使用IMPORT导入数据
一、join关联小案例
1.1 Linux下建相应目录
##数据文件统一存放在这个目录下
mkdir hivedemo
1.2 导入文件
因为Linux下yum install lrzsz
,所以可以直接将文件拖到这个目录下,不需要再经过Xftp上传文件.
1.3 执行hive脚本
#执行hive脚本
#hive -f 文件名
hive -f setup_tables.sql
1.4 查看数据库以及表是否创建成功
use demo;
show tables;
1.5 查询内容,做关联
查看emp_basic表
select * from emp_basic limit 1;
查询 emp_psc表
select * from emp_psn limit 1;
关联查询两张表内容
##join的几种用法
#内连接
select
eb.emp_id emp_id,
eb.job_title job_title,
eb.company company,
ep.age
from emp_basic eb
inner join emp_psn ep
on
eb.emp_id=ep.emp_id
limit 10;
#左外连接
select
eb.emp_id emp_id,
eb.job_title job_title,
eb.company company,
ep.age
from emp_basic eb
left join emp_psn ep
on
eb.emp_id=ep.emp_id
limit 10;
#右连接
select
eb.emp_id emp_id,
eb.job_title job_title,
eb.company company,
ep.age
from emp_basic eb
right join emp_psn ep
on
eb.emp_id=ep.emp_id
limit 10;
内连接查询结果
二、map join(hive中这个机制自动的)
MapJoin操作在Map端完成
小表关联大表
可进行不等值连接
开启mapjoin操作
--如果符合条件,它会自动去设置mapjoin
set hive.auto.convert.join = true(默认值)
运行时自动将连接转换为MAPJOIN
MAPJOIN操作不支持:(局限性)
在UNION ALL, LATERAL VIEW, GROUP BY/JOIN/SORT BY/CLUSTER BY/DISTRIBUTE BY等操作后面
在UNION, JOIN 以及其他 MAPJOIN之前
三、union
对所查询的结果进行合并
所有子集数据必须具有相同的名称和类型
UNION ALL:合并后保留重复项
UNION:合并后删除重复项(v1.2之后)
可以在顶层查询中使用(0.13.0之后)
ORDER BY, SORT BY, CLUSTER BY, DISTRIBUTE BY 和LIMIT适用于合并后的整个结果
集合其他操作可以使用JOIN/OUTER JOIN来实现
差集、交集
例子:union all
select * from employee
union all
select * from employee where name='Will';
union 1.2后的版本才支持,暂时我的机器上试不了
四、装载数据 insert
- INSERT支持OVERWRITE(覆盖)和INTO(追加)
- Hive支持从同一个表进行多次插入
- INSERT INTO中TABLE关键字是可选的
- INSERT INTO可以指定插入到哪些字段中
- INSERT INTO table_name VALUES,支持插入值列表
- 数据插入必须与指定列数相同
##通过查询语句插入
insert into employee select * from ctas_employee
-- 多插入
from ctas_employee
insert overwrite table employee select *
insert overwrite table employee_external select *;
-- 插入到分区(需要动态分区)
from ctas_employee
insert overwrite table employee_partitioned partition(year, month)
select *,2018,09;
五、将数据插入/导出到文件(insert)
导到本地
--使用insert从表内将数据从表插入到文件
--overwrite:覆盖
from employee
insert overwrite local directory '/root/getdata/' select *;
--带指定分隔符的
from employee
insert overwrite local directory '/root/getdata/'
row format delimited
fields terminated by ','
select *;
导到hdfs上
from employee
insert overwrite directory '/kb10/output1'
select *;
六、数据交换(import/export)
IMPORT和EXPORT用于数据导入和导出
常用于数据迁移场景
除数据库,可导入导出所有数据和元数据
6.1 使用EXPORT导出数据
---使用export导出数据 out 其实就是kb10下的一个文件夹
export table employee to '/kb10/out1';
注意:metadata是元数据,data是具体的数据
##查看元数据信息命令
dfs -cat /kb10/out1/_metadata;
6.2 使用IMPORT导入数据
--从哪里导入
import table employee_import from '/kb10/out1';