---------------数据导入导出------------------------------ 创建表:
CREATE TABLE IF NOT EXISTS userses(
name string,
sex string
)
row format delimited fields terminated by'\t';
CREATE TABLE IF NOT EXISTS user_tmp(
name string,
sex string
)
partitioned by(age int)
row format delimited fields terminated by'\t';
一、数据导入部分: (1)、总所周知,hive本身并没有严格的数据格式。 Hive导入数据的四种方式:(肯定不只四种) 简单介绍四种: 1、从本地文件系统中导入数据到Hive表(数据copy过程):
load data local inpath '/hivedata/user.txt' into table user;
2、从HDFS上导入数据到Hive表(从hdfs导入数据到Hive中,是一个数据移动过程!)
load data inpath '/user.txt' into table user;
3、从别的表中查询出相应的数据并导入到Hive表中
insert into table user_tmp select * from user;
4、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。
create table userses_tmp as select * from userses;
create table userses_tmp2 as select name from userses where sex='nan';
5、创建表时跟上 location “hdfs上的目录input”
CREATE TABLE IF NOT EXISTS user_tmp3(
name string,
sex string
)
row format delimited fields terminated by'\t'
location '/input';
Hvie时读时模式!!!!
二、数据导出部分: 1、Hive导出数据的三种方式: 根据导出的地方不一样,将这些方式分为三种: (1)、导出到本地文件系统(保存hive查询结果);
insert overwrite local directory'/home/hadoop/outdir' select* from userses;
导出数据时指定分隔符:
insert overwrite local directory'/root/outdir' row format delimited fields terminated by '\t' select* from userses;
注意: 在Hive 0.11.0版本之前,数据的导出是不能指定列之间的分隔符的,只能用默认的列分隔符。 所以到处数据时数据默认分隔符是^A(不指定分隔符时到处数据时可以看看)。 在Hive0.11.0版本新引进了一个新的特性,也就是当用户将Hive查询结果输出到文件,用户可 以指定列的分割符,而在之前的版本是不能指定列之间的分隔符。
如若表有 基本类型和复合数据类型!
insert overwrite directory'/hivedata/user.txt' into table user
row format delimited fields terminated by '\t'
collection items terminated by','
map keys terminated by':'
select* from userses;
直接在Linux终端执行(把数据导出到本地系统):
hive -S -e 'select * from hive_db.userses'>>/home/hadoop/hivedata/logsdir/users.txt;
HQL="insert overwrite local directory '/home/hadoop/hivedata/logsdir' select log from reglog;"
hive -S -e "$HQL"
(2)、导出到HDFS中
insert overwrite directory'/out01' select* from userses;
(3)、导出到Hive的另一个表中这也是Hive的数据导入方式.
insert into table user_tmp select * from user;
|