• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Hive内部表和外部表

武飞扬头像
小迷糊>_<
帮助5

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内部表

  1.  
    create table if not exists student(
  2.  
    id string,
  3.  
    name string
  4.  
    )
  5.  
    comment student
  6.  
    row format delimited
  7.  
    fields terminated by '\t'
  8.  
    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外部表

  1.  
    create external table if not exists student2(
  2.  
    id string,
  3.  
    name string
  4.  
    )
  5.  
    row format delimited
  6.  
    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)查询更改后表的类型:

hive> desc formatted student;

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhcajj
系列文章
更多 icon
同类精品
更多 icon
继续加载