1、内部表
内部表,也叫托管表,是Hive在创建表时的默认表。
特点:在内部表被删除后,表的元数据和表数据都从HDFS中完全删除
create table if not exists 表名(
字段名称 字段类型,
...
字段名称 字段类型
)
comment 表的注释
raw format delimited
fields terminated by '分隔符' #列以'分隔符'分割
line terminated by '分隔符' #此分隔符只能是‘\n’,目前hive只支持‘\n’,行分割也是默认‘\n’
stored as 文件存储类型 #常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、 #TEXTFILE(文本)、RCFILE(列式存储格式文件)如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。
location 存储在HDFS上的位置 ;
适用场景:
ETL数据清理是用内部表做中间表,清理时HDFS上的文件同步删除
在误删的情况下,易于恢复的数据,用内部表
统计分析时,不涉及数据共享数据的情况
需要对元数据和表数据进行管理时
①:首先创建一个student内部表
create table if not exists student(
id string,
name string
)
comment student
row format delimited
fields terminated by '\t'
line terminated by '\n';
②查看所建的表的全部信息----其中Table Type 表示表的类型
(内部表Internal TABLE/Managed TABLE,外部表EXTERNAL TABLE)
内部表数据存储的位置是hive.metastore.warehouse.dir,
如果创建内部表时没有指定location,就会在/user/hive/warehouse/下新建一个表目录,其余情况同上。
小编在配置时更改了文件 所以此地的默认目录为/data/hive/warehouse/
2、外部表
特点:表中的数据在删除后仍然在HDFS中。
如果我们创建一个外部表,在删除表之后,只有与表相关的元数据被删除,而不会删除表的内容。
声明外部表的关键字:external
声明外部表的基本语法:
create external table if not exists 表名(
字段名称 字段类型,
...
字段名称 字段类型
)
raw format delimited
fields terminated by '分隔符'
验证删除一个外部表表数据仍旧存在
①:首先创建一个student2外部表
create external table if not exists student2(
id string,
name string
)
row format delimited
fields terminated by '\t';
②查看所建的表的全部信息----其中Table Type 表示表的类型
(内部表Internal TABLE/Managed TABLE,外部表EXTERNAL TABLE)
③将数据加载至student2表中
hive> load data local inpath '/opt/student.txt' into table student2;
④查看表中数据
hive> select * from student2;
⑤将外部表删除
hive> drop table student2;
⑥查看是否删除成功
hive> select * from student2;
FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'student2'
⑦查看HDFS路径下是否保留表数据
[root@master ~]# hadoop fs -cat /data/hive/warehouse/student2/student.txt
外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse
文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
外部表适用场景
对于恢复误删的数据困难的情况,例如:实时采集的数据
外部表的优点:
可以共享数据,且不加载到hive中,减少数据加载,落地
3、管理表(内部表)与外部表互相转换
(1)查询已有表的类型
hive> desc formatted student;
(2)修改内部表student为外部表
hive> alter table student set tblproperties('EXTERNAL'='TRUE');
(3)查询更改后表的类型:
hive> desc formatted student;
(4)修改外部表student为内部表
hive> alter table student set tblproperties('EXTERNAL'='FALSE');
(5)查询更改后表的类型:文章来源:https://www.toymoban.com/news/detail-446768.html
hive> desc formatted student;
文章来源地址https://www.toymoban.com/news/detail-446768.html
到了这里,关于Hive内部表及外部表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!