【HQL】数据的装载和导出

11 篇文章 0 订阅

  今天学习在 Hive 中如何将数据装载到表中。关注公众号回复 803 获取《Hive 编程指南》pdf。
【HQL】数据的装载和导出

1.向管理表中装载数据

Hive 不能行级数据插入、更新、删除,只能大量装载。

load data local inpath '${env:HOME}/california-employees'
overwrite into table employees
partition (country='US',state='CA');

如果分区目录不存在,会创建分区目录,然后将数据拷贝到该目录。

overwrite 关键字会将文件夹中已经存在的数据先删除掉。没这个关键字则不会删除。

2.通过查询语句插入数据

overwrite 关键字会覆盖掉之前的内容,没有使用 overwrite 会追加。

# 筛选拆入
insert overwrite table employees
partition (country='US',state='OR')
select * from staged_employees se
where se.cnty='US' and se.st='OR';

# 扫描一次数据按多种方式划分
from staged_employees se
insert overwrite table employees
	partition (country='US',state='OR')
	select * where se.cnty='US' and se.st='OR'
insert overwrite table employees
	partition (country='US',state='CA')
	select * where se.cnty='US' and se.st='CA'
insert overwrite table employees
	partition (country='US',state='IL')
	select * where se.cnty='US' and se.st='IL'
2.1 动态分区插入

基于查询参数推断分区名称。

# 动态分区
insert overwrite table employees
partition (country,state)
select ...,se.cnty,se.st
from staged_employees se;

# 动态 静态混合使用,静态分区键必须在动态分区键前面
insert overwrite table employees
partition (country='US',state)
select ...,se.cnty,se.st
from staged_employees se
where se.cnty='US';

动态分区属性的设置:

在这里插入图片描述

3.创建表时加载数据

使用场景:从宽表中选取部分需要的数据。

注意:不能用于外部表。因为这里本身没进行数据装载,而是将元数据中指定一个指向数据的路径。

create table ca_employees
as select name,salary,address
from employees
where se.state='CA';
4.导出数据

如果数据文件是用户需要的格式,则直接从文件夹拷贝。否则使用下面的语法:

insert overwrite local directory '/tmp/ca_employees'
select name,salary,address
from employees
where se.state='CA';

# 输出到多个文件夹
from staged_employees se
insert overwrite local directory '/tmp/or_employees'
	select * where se.cnty='US' and se.st='OR'
insert overwrite local directory '/tmp/ca_employees'
	select * where se.cnty='US' and se.st='CA'
insert overwrite local directory '/tmp/il_employees'
	select * where se.cnty='US' and se.st='IL'

写入到 ‘/tmp/ca_employees’ 的文件数取决于 reducer 个数。Hive 会将所有字段序列化成字符串写入文件。

欢迎关注。每天分享大数据开发面经和技术。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值