hive 的数据操作
向表中装载数据
(1)LOAD DATA
LOAD DATA LOCAL INPATH '/usr/x/employees.txt'
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA');
对于分区表,如果分区目录不存在,则会先创建分区目录,然后再将数据拷贝过去,对于非分区表,则应省略PARTITION语句。
OVERWRITE关键字表示覆盖表内已存在的数据。
通常情况下,路径指定为一个目录,hive会将目录下所有文件都拷贝到目标表的路径下,文件名保持不变。
LOCAL指定路径为本地文件系统,数据会被拷贝到目标位置。省略的话,路径是分布式文件系统中的路径,数据是转移到目标位置。
hive不会验证数据是否和表结构一致,但会验证文件格式是否和表结构定义一直。
(2)通过查询语句
INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state = 'OR')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR';
这里使用OVERWRITE之前分区的数据都会被覆盖。使用INTO的话,将以追加的方式写入数据。
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) 单个查询语句中创建表并加载数据
CREATE TABLE ca_employees
AS SELECT name, salary, address
FROM employees
WHERE se.state = 'CA';
hive没有行级别的更新和删除(后来添加了INSERT,这种方式是先创建一哥中间表加载数据,再把数据拷贝到目标表)。
也可以考虑使用sqoop将数据装载入hive中。
导出数据
建议使用sqoop。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: