Hive载入载出数据方式
数据一旦被导入就不可以被修改
数据会被存放到HDFS上,HDFS不支持数据的修改
载入数据-load
语法结构
load data [local] inpath '/opt/module/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];
load data 固定语法
[local] :如果有local说明分析本地数据,如果去掉local说明分析hdfs上的数据
inpath '/opt/module/datas/student.txt' 导入数据的路径
overwrite 新导入的数据覆盖以前的数据
into table student 导入到那张表中
Linux上的数据
load data local inpath '/root/shy666.txt' into table user;
load data local inpath '/root/shy666.txt' overwrite into table user;
HDFS上的数据
load data inpath '/user/hive/shy666.txt' into table user;
load data inpath '/user/hive/shy666.txt' overwrite into table user;
载入数据-insert
查询t1表的数据插入到t2表中
1,admin
2,admin1
3,admin2
4,admin3
create table t1(
id string,
name string
)
row format delimited fields terminated by '\t'
lines terminated by '\n';
load data local inpath '/root/t1.txt' into table t1;
create table t2(
name string
);
insert overwrite table t2 select name from t1;
将一次查询的结果放入到多张表中
create table t3(
id string
);
from t1
INSERT OVERWRITE TABLE t2 SELECT name
INSERT OVERWRITE TABLE t3 SELECT id ;
按照原始SQL数据插入的方式
insert into t1 values ('id','5'),('name','zhangwuji');
载入数据-select
create table if not exists default.user1
as select * from user;
总结:
-
不管数据文件在哪,只要是内部表,数据文件都会拷贝一份到数据库表的文件夹中 -
如果是追加拷贝,查询数据的时候会查询所有的数据文件 -
用csv文件导入数据需要将表头去掉 TBLPROPERTIES("skip.header.line.count"="1")
-
导入数据的时候请先用show creat table查看表结构,然后考虑导入方式(csv文件表结构需要用“,”分隔,存储格式为HiveIgnoreKeyTextOutputFormat) -
如果hive是分区表,csv表里需要将分区字段剔除,load数据的时候需要加上分区 -
导入之前需要检查csv表格中每一个字段是否带有与分隔符一样的字符,如果有,则需要处理后再进行导入,否则会发生数据偏移
载出数据-export
导出到HDFS上
export table default.t1 to '/user/hive/warehouse/export/t1';
载出数据-insert
将查询的结果导出到HDFS上
insert overwrite directory '/user/export/t1'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from t1;
将查询的结果格式化导出到本地
insert overwrite local directory '/opt/hive/datas/export/t1'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from t1;
还可以把数据导出到关系型数据库,具体请参考Sqoop导入导出数据文档
|