文章目录

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

hive 关联update 语法 hive 表关联_数据

1.2 导入文件

因为Linux下yum install lrzsz,所以可以直接将文件拖到这个目录下,不需要再经过Xftp上传文件.

hive 关联update 语法 hive 表关联_hive_02

1.3 执行hive脚本

#执行hive脚本
#hive -f 文件名
 hive -f setup_tables.sql

hive 关联update 语法 hive 表关联_hive_03

1.4 查看数据库以及表是否创建成功

use demo;
show tables;

hive 关联update 语法 hive 表关联_导出数据_04

1.5 查询内容,做关联

查看emp_basic表

select * from emp_basic limit 1;

hive 关联update 语法 hive 表关联_hive 关联update 语法_05


查询 emp_psc表

select * from emp_psn limit 1;

hive 关联update 语法 hive 表关联_hive_06

关联查询两张表内容
##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;

内连接查询结果

hive 关联update 语法 hive 表关联_hive 关联update 语法_07

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

hive 关联update 语法 hive 表关联_hive 关联update 语法_08


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

hive 关联update 语法 hive 表关联_hive_09

--带指定分隔符的
from employee
insert overwrite local directory '/root/getdata/'
row format delimited
fields terminated by ','
select *;

导到hdfs上

from employee
insert overwrite directory '/kb10/output1'
select *;

hive 关联update 语法 hive 表关联_导出数据_10

六、数据交换(import/export)

IMPORT和EXPORT用于数据导入和导出
常用于数据迁移场景
除数据库,可导入导出所有数据和元数据

6.1 使用EXPORT导出数据

---使用export导出数据   out 其实就是kb10下的一个文件夹
export table employee to '/kb10/out1';

hive 关联update 语法 hive 表关联_hive_11


注意:metadata是元数据,data是具体的数据

##查看元数据信息命令

dfs -cat /kb10/out1/_metadata;

hive 关联update 语法 hive 表关联_导出数据_12

6.2 使用IMPORT导入数据

--从哪里导入
import table employee_import from '/kb10/out1';

hive 关联update 语法 hive 表关联_hive_13