三十一、Hive的DDL数据定义

本文主要讲述Hive的数据库定义语言,关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~


目录

一、数据库

1.1 创建数据库

1.2 显示数据库

1.3 查看数据库详情

1.4 切换数据库

1.5 修改数据库

1.6 删除数据库

二、数据表

2.1 创建表

2.2 内部表

2.2.1 示例

2.3 外部表

2.3.1 示例

2.4 内部表和外部表相互转化

2.5 分区表

2.6 修改表

2.6.1 修改表名

2.6.2 修改列信息

2.7 删除表


一、数据库

1.1 创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]  # 数据库注释
[LOCATION hdfs_path]  # 指定数据库存放在hdfs上的位置
[WITH DBPROPERTIES (property_name=property_value, ...)];  # 属性参数

1.2 显示数据库

show databases;

show databases like 'xz*';

1.3 查看数据库详情

desc database xzw;

desc database extended xzw;

1.4 切换数据库

1.5 修改数据库

用户可以使用ALTER DATABASE命令为某个数据库设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

alter database xzw set dbproperties('createtime'='20201213');

1.6 删除数据库

drop database [if exists] database_name;

也可以使用cascade命令强制删除数据库:

drop database database_name cascade;

二、数据表

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]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

建表字段说明如下:

(1)CREATE TABLE:创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用IF NOT EXISTS选项来忽略这个异常。

(2)EXTERNAL:关键字可以让用户创建一个外部表,在建表的同时可以指定一个指向实际数据的路径(LOCATION),在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

(3)COMMENT:为表和列添加注释。

(4)PARTITIONED BY:创建分区表。

(5)CLUSTERED BY:创建分桶表。

(6)SORTED BY:不常用,对桶中的一个或多个列另外排序。

(7)ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]:用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定ROW FORMAT或者ROW FORMAT DELIMITED,将会使用自带的SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列的数据。SerDe是Serialize/Deserilize的简称, Hive使用Serde进行行对象的序列与反序列化。

(8)STORED AS指定存储文件类型。常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)。如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用STORED AS SEQUENCEFILE。

(9)LOCATION :指定表在HDFS上的存储位置。

(10)AS:后跟查询语句,根据查询结果创建表。

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

2.2 内部表

内部表,也叫管理表,是默认情况下创建的表。Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir所定义的目录的子目录下。当我们删除一个内部表时,Hive也会删除这个表中数据。

2.2.1 示例

1、创建一个内部表 

create table if not exists inner_table(
id int,
name string
)
row format delimited fields terminated by '\t';

2、通过如下命令查看表类型 

=

2.3 外部表

因为表是外部表,所以Hive并非认为其完全拥有这份数据。故删除该表并不会删除掉这份数据,只是描述表的元数据信息会被删除掉。

2.3.1 示例

1、创建一个外部表,通过情况下,建表语句后面会跟一个location的属性,用来指定数据在HDFS上的存放位置。

create external table outer_table(
id int,
name string
)
row format delimited fields terminated by '\t';

2、通过以下方式查看表的类型

 

2.4 内部表和外部表相互转化

内部表和外部表可以通过如下的命令实现相互转化:

内部表转外部表:
alter table test set tblproperties('EXTERNAL'='TRUE');

外部表转内部表:
alter table test set tblproperties('EXTERNAL'='FALSE');

这里值得注意的是,上述代码括号中的内容为固定写法,不能随意更改为小写!

2.5 分区表

分区表实际上就是对应一个HDFS文件系统上独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,通过分区会大幅度的提高查询效率。注意:分区的字段不能是表中已有的字段。

create table partition_tab(
id int,
name string
)
partitioned by (rq string)
row format delimited fields terminated by '\t';

1、使用如下命令加载数据到分区表中:

load data local inpath '/root/files/stu.txt' into table xzw.partition_tab partition(rq='202012');

2、使用如下命令查询分区表的数据:

select * from partition_tab where rq='202012';

3、增加分区

增加单个分区:
alter table partition_tab add partition(rq='202011');

增加多个分区:
alter table partition_tab add partition(rq='202011') partition(rq='202010');

4、删除分区

删除单个分区:
alter table partition_tab drop partition (rq='202010');

删除多个分区:
alter table partition_tab drop partition (rq='202010'), partition (rq='202011');

5、查看分区表一共有多少分区

show partitions partition_tab;

6、分区表可以创建二级分区

create table partition_tab(
id int,
name string
)
partitioned by (rq string, loc string)
row format delimited fields terminated by '\t';

7、分区表与数据产生联系的几种方式

(1)先上传数据到hdfs对应的分区下,然后修复分区表,修复命令如下:

msck repair table partition_tab;

(2)先上传数据,然后再添加分区。

2.6 修改表

2.6.1 修改表名

ALTER TABLE table_name RENAME TO new_table_name;

2.6.2 修改列信息

1、更新列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

2、增加列
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...) 

3、替换列
ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 

2.7 删除表

drop table tab_name;

以上就是本文Hive的DDL数据定义的全部内容,你们在此过程中遇到了什么问题,欢迎留言,让我看看你们都遇到了哪些问题~

猜你喜欢

转载自blog.csdn.net/gdkyxy2013/article/details/111090569