【Hive】Hive编程指南(Part 2)

第五章 HiveQL:数据操作

向管理表中装载数据

LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA');
  1. 如果分区目录不存在的话,这个命令会先创建分区目录,然后再将数据拷贝到该目录下。
  2. Partition 字句可选。
  3. 使用了LOCAL关键字,则路径应该为本地文件系统路径;否则路径应该是分布式文件系统中的路径。
  4. 如果指定了OVERWRITE关键字,那么目标文件夹中之前存在的数据将会被先删除掉。

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

1. 按一种方式进行划分

INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state = 'OR')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR';

2. 按多种方式进行划分

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

3. 动态分区插入

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

Hive根据SELECT语句中最后2列来确定分区字段country和state的值。

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

CREATE TABLE ca_employees
AS SELECT name, salary, address
FROM employess
WHERE state = 'CA';

这个功能不能用于外部表。

导出数据

如果数据文件恰好是用户需要的格式,那么只需要简单地拷贝文件夹或文件就可以了。

hadoop fs -cp source_path target_path

否则,使用INSERT ... DIRECTORY ...,例如:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name, salary, address
FROM employees
WHERE se.state = 'CA';
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值