06 hive中建表语法、内部表、外部表

您所在的位置:网站首页 hive加载数据文件到数据表的语法 06 hive中建表语法、内部表、外部表

06 hive中建表语法、内部表、外部表

2024-07-11 17:20| 来源: 网络整理| 查看: 265

 

二、数据表

 

2.1 创建数据表语法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

   [(col_name data_type [COMMENT col_comment], ...)]

   [COMMENT table_comment]

   [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

   [CLUSTERED BY (col_name, col_name, ...)

   [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

   [ROW FORMAT row_format]

   [STORED AS file_format]

   [LOCATION hdfs_path]

 

说明:

[EXTERNAL] :默认是内部表,如果加上就是外部表

PARTITIONED BY :如果添加了此关键字,表示当前是个分区表

CLUSTERED BY :如果添加此关键字,表示是个分桶表

SORTED BY :按照哪些字段进行排序操作

INTO num_buckets BUCKETS : 要分多少个桶

ROW FORMAT :表示字段与字段之间的分隔符

STORED AS : 当前存储的格式 比如 SEQUENCEFILE|TEXTFILE|RCFILE 来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。

 

LOCATION : 指定表在hdfs上存储位置

LIKE :允许用户复制现有的表结构,但是不复制数据。

 

在hive中,一共有4种类型的表:

内部表

外部表

分区表

分桶表

 

2.2 内部表

2.2.1 什么是内部表

未被external修饰的是内部表(managed table),

内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),

删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。

2.2.2 创建按照指定分割符的表

create table if not exists stu2(id int,name string) row format delimited fields terminated by '\t' stored as textfile location '/user/stu2';

2.2.3 创建相同表结构的表

create table stu4 like stu2;

2.2.4 查询表的详细类型

desc [formatted] stu2;

2.2.4 删除表

drop table stu2;

 

2.3 外部表

外部表就是 external 关键字创建的表,外部表的数据来自于 HDFS 上的已有的文件,只是将这个文件和外部表的表结构进行映射,建立表结构和数据的关系,如果删除外部表,数据不会被删除,只是删除了表结构。

2.3.1 将外部表和 HDFS 文件建立关联

Load命令用于将外部数据加载到Hive表中

语法:

loaddata [local] inpath '/export/server/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];

参数:

load data:表示加载数据

local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表

inpath:表示加载数据的路径

overwrite:表示覆盖表中已有数据,否则表示追加

into table:表示加载到哪张表

student:表示具体的表

partition:表示上传到指定分区

2.3.2 案例

分别创建老师与学生表外部表,并向表中加载数据

源数据如下:

student.txt

01 赵雷 1990-01-01 男

02 钱电 1990-12-21 男

03 孙风 1990-05-20 男

04 李云 1990-08-06 男

05 周梅 1991-12-01 女

06 吴兰 1992-03-01 女

07 郑竹 1989-07-01 女

08 王菊 1990-01-20 女

 

teacher.txt

01 张三

02 李四

03 王五

 

1、创建老师表:

create external table teacher (t_id string,t_name string) row format delimited fields terminated by '\t';

2、创建学生表:

create external table student(s_id string,s_name string,s_birth string, s_sex string) row format delimited fields terminated by '\t';

3、从本地文件系统向表中加载数据

load data local inpath'/export/server/hivedatas/student.txt' into table student;

4、加载数据并覆盖已有数据

load data local inpath'/export/server/hivedatas/student.txt' overwrite  into table student;

 

5、从hdfs文件系统向表中加载数据

需要提前将数据上传到hdfs文件系统,其实就是一个移动文件的操作

cd /export/server/hivedatas

hadoop fs-mkdir-p/hivedatas

hadoop fs-put teacher.txt/hivedatas/

load data inpath'/hivedatas/teacher.txt' into table teacher;

 

注意,如果删掉student表,hdfs的数据仍然存在,并且重新创建表之后,表中就直接存在数据了,因为我们的student表使用的是外部表,drop table之后,表当中的数据依然保留在hdfs上面了

 

三、内部表和外部表之间的转换

查询表的类型

desc formatted hive_map;

修改内部表hive_map为外部表

alter table hive_map set tblproperties('EXTERNAL'='TRUE');

 

  3.修改外部表hive_map为内部表

alter table hive_map set tblproperties('EXTERNAL'='FALSE');

 

 

注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3