Hive的表类型
在Hive的学习中,有一个非常重要的知识点,那就是Hive的表类型。
Hive的表类型主要有:内部表(受控表)、外部表、临时表、分区表、分桶表。
1:内部表
内部表又称受控表,hive默认创建的表类型为内部表,当删除内部表的时候,数据和元数据都会被删除。
2:外部表
创建外部表需要使用EXTERNAL关键字,当删除外部表的时候,只删除元数据,不删除数据。
使用场景,例如:某个公司的原始日志数据存放在一个目录中,多个部门对这些原始数据进行分析,那么创建外部表就是比较好的选择了,因为即使删除了外部表,原始数据并不会被删除。
3临时表(不支持分区)
创建临.时表,使用TEMPORARY关键字,临时表只在当前会话中存在,当会话结束后,临时表会自动删除。
4分区表
创建分区表是为了防止暴力扫描全表,提高查询效率。分区字段在源文件中是不存在的,需要在添加数据的时候手动指定。
每一个分区对应一个目录。通过partitioned by来在创建分区表的时候添加分区字段。
使用场景:可以通过分区表,将每天搜集的数据进行区分,查询统计的时候通过指定分区,提高查询效率。
5.分桶表
桶是比表或分区更为细粒度的数据范围划分。针对某一列进行桶的组织,对列值哈希,然后除以桶的个数求余,决定将该条记录存放到哪个桶中。
需要先设置:set hive.enforce.bucketing = true;
再创建分桶表:
二 创建表的语法
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] DELIMITED 或 SERDE
[STORED AS file_format]
[LOCATION hdfs_path]
1.EXTERNAL 创建外部表的关键字.
2.COMMENT 可以为表与字段增加描述信息.
3.partitioned by 创建分区表的关键语句.
4.clustered by 创建分桶表的关键语句.
5.ROW FORMAT 行格式,指定以什么分割原始数据.
6.STORED AS 以何种文件存储格式进行存储.
7.LOCATION 在使用external创建外部表的同时需要指定一个指向实际数据的路径.
8.IF NOT EXIST 若相同名字的表已经存在,则执行建表语句抛出异常;如果加上if not exists,则不会报该表已经存在的异常,会显示OK,并且不在创建同名表.
9.SERDE 序列化与反序列化.
2.创建外部表的列子
需要先设置:set hive.enforce.bucketing = true;
再创建分桶表:
create table emp_bu(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)CLUSTERED BY(deptno) INTO 4 BUCKETS
row format delimited fields terminated by '\t';
三修改表
修改 表的名称:
ALTER TABLE table_name RENAME TO new_table_name;
删除表
TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value, ...)];
查看数据库列表
-- 语法
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
-- 示例:
SHOW DATABASES like 'hive*';
LIKE 子句允许使用正则表达式进行过滤,但是 SHOW 语句当中的 LIKE 子句只支持 *(通配符)和 |(条件或)两个符号。例如 employees,emp *,emp * | * ees,所有这些都将匹配名为 employees 的数据库。
- 查看表的列表
-- 语法
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];
-- 示例
SHOW TABLES IN default;
- 查看视图列表
SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards']; --仅支持 Hive 2.2.0 +