Hadoop学习(九)——HiveQL数据操作

查询语言

向表中装载数据

从表中抽取数据

向管理表中装载数据

LOAD DATA LOCAL......                拷贝本地数据到分布式文件系统的目标位置

LOAD DATA ......                            转移数据到目标位置

# 示例
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION(contry='US',state='CA');

 若分区目录不存在,会先创建分区目录,然后将数据拷贝到该目录下;

若目标表是非分区表,语句中应该省略PARTITION子句。

指定OVERWRITE关键字,目标文件夹之前存在的数据会先被删掉,重名会覆盖。

Hive不会验证用户装载的数据和表的模式是否匹配,会验证文件格式是否和表结构定义的一致。

通过查询语句向表中插入数据

INSERT 插入数据

# 插入数据
# 假设staged_employees表中已经有数据
# 每次执行都会扫描一遍数据
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';

动态分区插入

【根据SELECT语句中最后两列确定分区字段的值】

可以混合,但静态分区键必须出现在动态分区键之前。

INSERT OVERWRITE TABLE employees
PARTITION(country, state)
SELECT ..., se.cnty, se.st
FROM staged_employees se;

动态分区默认关闭,开启后默认以"严格"模式执行,该模式要求至少有一列分区字段是静态的,有助于阻止因设计错误导致查询产生大量的分区。

动态分区属性

属性名称缺省值描述
hive.exec.dynamic.partitionfalse设置为true,开启动态分区功能。
hive.exec.dynamic.partition.modestrict设置成nonstrict,表示允许所有分区都是动态的。
hive.exec.max.dynamic.partitions.pernode100每个mapper或reducer可以创建的最大动态分区 个数。
hive.exec.max.dynamic.partitions+1000一个动态分区创建语句最大可以创建的动态分区个数。
hive.exec.max.created.files100000全局可以创建的最大文件个数,有一个Hadoop计数器会跟踪记录创建了多少个文件

单个查询语句中创建表并加载数据

【从大的宽泛的数据中选择小的需要的部分】

这个功能不能用于外部表

# 从employees表中获取来自加利福尼亚的雇员的name、salary和address信息,保存为新表
CREATE TABLE ca_emplloyees
AS SELECT name,salary,address
FROM employees
WHERE se.state='CA';

导出数据

数据文件是用户需要的格式(简单的拷贝即可)

hadoop fs -cp source_path target_path

否则

【一个或多个文件将被写入,具体个数取决于调用的reducer个数】

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name,salary,address
FROM employees
WHERE se.state='CA';

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值