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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!