1.将查询到的数据写入文件系统
insert [overwrite]
directory directoryname
select select_fileds from from_statement;
语法解释:
(1)insert --将数据向hive装载数据的关键字
(2)overwrite --如果包含,支持用户将数据装载到一个早已建好的表中并且替换原来的数据
如果省略,支持用户将数据装载到一个早已建好的表中并且将新数据追加到原来的数据后面
(3)directory directoryname ----directoryname 是hadoop分布式文件系统中已有的目录
名称,使用hadoop fs -mkdir directoryname 来创建一个目录
(5)select --可以是针对hive生态系统的任何select命令
2.使用已有表创建输出目录
hadoop fs -mkdir ‘exampleoutput’
hive
use census;
insert overwrite
directory ‘exampleoutput’
row format delimited fields terminated by ‘,’
select persid,firstname,lastname
from Person;
exits;
测试一下,是否所有的数据都已经装载
hadoop fs -cat ‘exampleoutput/000000_0’
3.直接向表插入值
hive支持用一系列静态值直接将数据装载到表中
insert into table tablename values (row_values1),(row_values2);
语法解释
(1)insert --将数据向hive装载数据的关键字
(2)table tablename ----tablename是hive中已经存在的表的名称
使用create table tablename语句
(3)values (row_values1),(row_values2) --值(row_values1),(row_values2)是相同格式
的单条记录,而不是表的记录
4.案例
目标:可以将一条记录直接插入到一个名为 personhub 的表中
use census;
insert into table personhub values (0);
测试一下数据是否加载
select persid from personhub where persid = 0 ;
5.直接更新表中的数据
update tablename set column = value [where expression] ;
语法解释
set column = value --set 命令更新该列一个值
[where expression] --where 可用于为不同的查询挑选特定列的值
6.案例
目标:更新person20表的数据
use census;
create table census.person20(
persid int,
firstname string,
lastname string
)
clustered by (persid) into 1 buckets
stored as orc
tblproperties(‘transactional’ = ‘true’);
insert into table person20 values (0,‘A’,‘B’),(2,‘x’,‘y’);
测试数据是否已经插入
select * from census.person20; //结果是2行上面插入的结果的记录
现在执行 更新 操作
use census;
update census.person20 set lastname = ‘SS’ where persid = 0 ;
select * from census.person20; //结果是2行记录
7.在表中直接删除数据
delete tablename [where experssion] ;
8.案例
use census;
create table census.person20(
persid int,
firstname string,
lastname string
)
clustered by (persid) into 1 buckets
stored as orc
tblproperties(‘transactional’ = ‘true’);
insert into table person30 values (0,‘A’,‘B’),(2,‘x’,‘y’);
测试数据是否已经插入
select * from census.person30; //结果是2行上面插入的结果的记录
删除一条记录
use census;
delete from census.person30 where persid = 0 ;
select * from census.person30; //结果是1条记录