Hive的DDL

Hive专栏
上一篇 主目录 下一篇

【前言】
hive的常用命令
【注】文中dbname表示数据库的名称
默认的Hive仓库路径:hdfs://hadoop01:50070/user/hive/warehouse/


1 数据库

1.1 创建数据库

create database dbname;//创建普通库
create databse if not exists dbname; // 创建库的时候检查存与否
create database dbname  comment 'create my db named dbname';// 创建库的时候带注释
create database dbname with dbproperties ('a'='aaa','b'='bbb');//创建带属性的库
create database mydb location "/aa/bb";//指定库的位置

1.2 查看数据库

show databases; //查看有哪些数据库
desc database [extended] dbname;//显示数据库的详细属性信息
select current_database();//查看正在使用哪个库
show create database dbname;//查看创建库的详细语句

1.3 删除库

drop database dbname;
drop database if exists dbname;

默认情况下,hive 不允许删除包含表的数据库有两种解决办法

  1. 手动删除库下所有表,然后删除库
  2. 使用 cascade 关键字
drop database if exists dbname cascade;
默认情况下就是 restrict
drop database if exists myhive ==== drop database if exists myhive restrict

1.4 切换库

use dbame;

2 表

2.1 查看表

show tables;
show tables in dbname;

2.2 创建表语法

语法结构:
在这里插入图片描述

  • CREATE TABLE
    创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
  • EXTERNAL
    关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),如果不存在,则会自动创建该目录。Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变(Hive内部表和外部表
  • PARTITIONED BY
    在 Hive Select 查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入 partition 概念。个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下,分区是以字段的形式在表结构中存在,通过 desc table 命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。
    分区建表分为 2 种:
    一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录
    一种是多分区,表文件夹下出现多文件夹嵌套模式
  • LIKE
    允许用户复制现有的表结构,但是不复制数据。
    示例:create table tableA like tableB(创建一张 tableA 空表复制 tableB 的结构)
  • COMMENT
    可以为表与字段增加描述
  • ROW FORMAT
    DELIMITED [FIELDS TERMINATED BY char]
    [COLLECTION ITEMS TERMINATED BY char]
    [MAP KEYS TERMINATED BY char]
    [LINES TERMINATED BY char]
  • STORED AS
    TEXTFILE | SEQUENCEFILE | RCFILE
    如果文件数据是纯文本,可以使用 STORED AS TEXTFILE,默认也是 textFile 格式,可以通过执行命令 set hive.default.fileformat,进行查看,如果数据需要压缩,使用 STORED AS SEQUENCEFILE。
    3种格式的介绍:
    A、默认格式 TextFile,数据不做压缩,磁盘开销大,数据解析开销大。可结合 gzip、bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive 不会对数据进行切分,从而无法对数据进行并行操作
    B、SequenceFile 是 Hadoop API 提供的一种二进制文件支持,文件内容是以序列化的 kv对象来组织的,其具有使用方便、可分割、可压缩的特点。 SequenceFile 支持三种压缩选择:NONE,RECORD,BLOCK。Record 压缩率低,一般建议使用 BLOCK 压缩
    C、RCFILE 是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record 在一个块上,避免读一个记录需要读取多个 block。其次,块数据列式存储,有利于数据压缩和快速的列存取。相比 TEXTFILE 和 SEQUENCEFILE,RCFILE 由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE 相比其余两种格式具有较明显的优势
  • CLUSTERED BY
    对于每一个表(table)或者分区,Hive 可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 也是针对某一列进行桶的组织。Hive 采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。把表(或者分区)组织成桶(Bucket)有两个理由:
    (1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接(Map-side join)高效的实现。比如 JOIN 操作。对于 JOIN 操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN 操作就可以,可以大大较少 JOIN 的数据量。
    在这里插入图片描述
    (2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。(经典面试题
  • LOCATION
    指定数据文件存放的 HDFS 目录,不管内部表还是外表,都可以指定。不指定就在默认的仓库路径。

2.3 创建表例子

CREATE TABLE page_view
 (viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING 
COMMENT 'IP Address of the User') 
COMMENT 'This is the page view table' 
PARTITIONED BY(dt STRING, country STRING) 
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 31 BUCKETS 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
COLLECTION ITEMS TERMINATED BY ',' 
MAP KEYS TERMINATED BY ':' 
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/myhive'

2.3.1 创建内部表

create table mytable (id int, name string)
row format delimited fields terminated by ',' stored as textfile;

2.3.2 创建外部表

create external table mytable2 (id int, name string) row format delimited fields terminated by ',' location '/user/hive/warehouse/mytable2';

2.3.3 创建分区表

create table mytable3(id int, name string) partitioned by(sex string) 
row format delimited fields terminated by ',' stored as textfile;

插入数据
插入男分区数据:load data local inpath '/root/hivedata/mingxing.txt' overwrite into table mytable3 partition(sex='male');
插入女分区数据:load data local inpath '/root/hivedata/mingxing.txt' overwrite into table mytable3 partition(sex='femalel');

在这里插入图片描述
执行语句select * from mytable3 where sex='male';只会在分区表sex=male下去查找
在这里插入图片描述
在这里插入图片描述

2.3.4 创建分桶表

create table stu_buck(Sno int,Sname string,Sex string,Sage int,Sdept string)
clustered by(Sno) sorted by(Sno DESC) into 4 buckets
row format delimited fields terminated by ',';

2.3.5 拷贝表结构

只拷贝表的结构,不拷贝表的数据。
不加external关键字:不管被拷贝的表是内部表还是外部表,新拷贝出来的都是内部表

create table new_table like old_table;

加 external 关键字:不管老表是内部表还是外部表,新表都是外部表

create external table new_table like old_table;

2.4 修改表

2.4.1 重命名

ALTER TABLE table_name RENAME TO new_table_name

2.4.2 修改表属性

注意,表的属性跟表的字段不同

ALTER TABLE table_name SET TBLPROPERTIES table_properties;
table_properties: (property_name = property_value, property_name = property_value, ... )

实例:
ALTER TABLE table_name SET TBLPROPERTIES (‘comment’ = ‘my new students table’);

2.4.3 修改SerDe信息

ALTER TABLE table_name [PARTITION partition_spec] SET SERDEPROPERTIES serde_properties;
serde_properties:
 : (property_name = property_value, property_name = property_value, ... )

实例:
更改列分隔符:ALTER TABLE test1 SET SERDEPROPERTIES ('field.delim' = ',');

2.4.5 增加/删除/改变/替换列

ALTER TABLE name ADD COLUMNS (col_name col_type[, col_name col_type, ...])
ALTER TABLE name DROP COLUMN col_name;
ALTER TABLE name CHANGE COLUMN col_name new_name new_type;
ALTER TABLE name REPLACE COLUMNS (col_name col_type[, col_name col_type, ...])

replace是替换所有的列
在这里插入图片描述

2.4.6 增加/删除分区

增加分区

ALTER TABLE mytable3 ADD PARTITION(sex='unknown') LOCATION '/user/hive/warehouse/temp_db.db/mytable3/sex=unknown'; 

在这里插入图片描述
在这里插入图片描述
删除分区

alter table mytable3 drop partition(sex='male');

在这里插入图片描述

2.4.7 删除表

drop删除整个表(结构和数据)

DROP TABLE [IF EXISTS] table_name;

2.4.8 清空表

truncate table 删除表中的所有行数据,但表结构及其列、约束、索引等保持不变。

TRUNCATE TABLE table_name [PARTITION partition_spec];

3 查看详细信息

3.1 查看数据库详细信息

desc database db_name;
desc database extended db_name;

3.2 查看表的详细信息

desc table_name;
desc extended table_name;
desc formatted table_name;
发布了180 篇原创文章 · 获赞 149 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33208851/article/details/104783332