Hive中join关联小案例&&map join&&union&&insert装载数据&&import/export

一、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

  1. INSERT支持OVERWRITE(覆盖)和INTO(追加)
  2. Hive支持从同一个表进行多次插入
  3. INSERT INTO中TABLE关键字是可选的
  4. INSERT INTO可以指定插入到哪些字段中
  5. INSERT INTO table_name VALUES,支持插入值列表
  6. 数据插入必须与指定列数相同

##通过查询语句插入

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';

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值