区别
1,内部表数据由Hive自身管理,外部表数据由HDFS管理
2,删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
3,内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse); 外部表数据的存储位置由
自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,
并将属于这个表的数据存放在这里);
创建方式
内部表:(默认)
create table tb_user(
uid string ,
name string ,
gender string ,
age int
)
row format delimited fields terminated by ","
location "/test/"; --指定HDFS中的文件夹
外部表:(external)
create external table tb_user2(
uid string ,
name string ,
gender string ,
age int
)
row format delimited fields terminated by ","
location "/test/";
关键字
location :指定工作目录。
在建表的时候没有使用location关键字 ,表的默认目录在HDFS上的配置只hive.metastore.warehouse.dir的数据库文件夹中:
直接将文件数据上传到该表目录下即可查询
stored as:指定存储格式
create table log_orc(
track_time string
)
stored as orc ; --指定orc格式,其他(parquet),都是列式存储格式
压缩比:ORC > Parquet > textFile
导入数据
1,导入本地数据(load)
load data local inpath "本地结构化文件的路径" into table tb_name ;
2,导入HDFS数据 (会将文件剪切到表的工作目录下)
load data inpath "本地结构化文件的路径" into table tb_name ;
3,覆盖导入(overwrite)
load data local inpath "" overwrite into table tb_name ;
4,insert导入
//手动插入
insert into tb_name valeus () , () ,() ,()
//查询其他表的数据追加
insert into tb_name select .... 将后面的select运算结果保存到某个表中
//查询其他表的数据覆盖
insert overwrite table tb_name select ....
insert 语法 不要一条一条数据的insert 因为一次insert在HDFS中生成一个小文件
5,create as 将结果数据直接保存在一个新的表中
create table if not exists tb_phone
as select * from tb_product where cate = '手机' ;
6,import 一定是导出的数据才能导入
导出数据到HDFS中
export table tb_product to
'/user/hive/warehouse/export/product';
导入数据方式
import table tb_product2 from
'/user/hive/warehouse/export/product';
导出数据
1,insert覆盖导入(会覆盖该文件夹下所有的文件,慎用)
insert overwrite [local] directory '/hive/p2/' --local:linux ,不指定HDFS
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'] --指定分隔符,不指定默认空格
select * from tb_product;
2,HDFS命令(简单直接,导出到linux本地)
hdfs dfs -get [表工作空间]
3,hive命令(在linux命令行执行,可以用来写脚本)
hive -e ‘sql’
例子:将结果输出到test.txt文件中(一个> 覆盖;两个>>追加)
hive -e 'select * from yege.tb_user;' >> /opt2/test.txt;
hive -f 执行一个脚本
例子:新建脚本export_hive.hql,
insert overwrite directory '/opt2' select * from yege.tb_user;
执行: hive -f export_hive.hql (导出数据到hdfs,脚本内容只能是在hive shell中的语句)
4,export导出工具 (导出到hdfs系统的opt2下面的user文件夹)
export table yege.tb_user to '/opt2/user';
5,数据迁移工具
Sqoop、dataX、Kettle、Canal、StreamSets等