第五章 HiveQL:数据操作
向管理表中装载数据
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA');
- 如果分区目录不存在的话,这个命令会先创建分区目录,然后再将数据拷贝到该目录下。
- Partition 字句可选。
- 使用了
LOCAL
关键字,则路径应该为本地文件系统路径;否则路径应该是分布式文件系统中的路径。 - 如果指定了
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';