15,hive 高级,建表,分桶标,视图

1 ,建表,复习 :

  1. 内部表 : 默认
create table movie (id int,name string) row format delimited fields terminated by ',';
  1. 外部表 :external
create external table stu_ext(id int,name string) row format delimited fields terminated by ',' location '/logs/stu';
  1. 分区表 :partitioned by ,分文件
create external table book(id int,name string) partitioned by(day string) row format delimited fields terminated by ',';
  1. 复制表结构 : like
create table book1 like book;
  1. 复制表结构 + 数据 : as
create table book1 as select * from book;

2 ,hive 中的数据,两种类型 :

  1. data :真实数据,存储在 hdfs 上。
  2. metadata : 元数据,存储在 MySQL 中。

3 ,内部表和外部表 :

  1. 删除的时候 :
    内部表:删除掉所有数据
    外部表:只删除元数据
  2. 使用场景 :
    外部表 : 对于一些原始日志文件,同时被多个部门同时操作的时候就需要使用外部表。
    内部表 : 我们做数据分析的时候,需要把数据整理到内部表中
  3. 查看 : 是内部表还是外部表
    describe extended tablename;
    如果是内部表 : 最后一行显示,会显示 tableType:EXTERNAL_TABLE
    如果是外部表 : 最后一行显示,会显示 tableType:MANAGD_TABLE

4 ,恢复外部表数据 :

  1. 因为外部表不会删除真实数据,所以,可以恢复
  2. 建表 :
create external table stu_ext(id int,name string) row format delimited fields terminated by ',' location '/logs/stu';
  1. 删除表 :
drop table stu_ext;
  1. 重新弄创建表,数据还在 :
create external table stu_ext(id int,name string) row format delimited fields terminated by ',' location '/logs/stu';
select * from stu_ext;

5 ,分区表 – 分桶表 : 都是内部表

  1. 分表方式 :
    分区 : 用伪列分区
    分桶 : 用真实的列分桶
  2. 存储方式 :
    分区 :分文件夹
    分桶 :分文件
  3. 粒度 :
    分区 :粗 ( 有可能数据倾斜 )
    分桶 :细
  4. 目的 :
    1 , 都是为了提高查询效率。
    2 , 分桶 :更加提高的查询的效率。

6 ,分桶表 : 原理

  1. 方式 : 比如按照 id 来分桶 : 就是用 id 的 hash 值来把一个大文件拆开。
  2. 个数 : 分桶表创建的时候就需要制定分多少个桶。

7 ,分桶表 : 创建

  1. 建表 :
create table tong(id int,name string) clustered by (id) into 3 buckets row format delimited fields terminated by ',';
  1. 开启 hive 的分桶功能 :
# 开启分桶
set hive.enforce.bucketing = true;
# 设置 reduce 数量
set map.reduce.tasks = 2;
  1. 导入数据 :
    1 ,数据来源 :桶表的数据不是导入的,而是从别的表中查出来的。
    2 ,为什么 : 如果想让 hive 用自己的方式处理数据,需要把数据交给 hive ,而不是直接导入。
    3 ,例子 :
insert into table tong select id,name from t_user;
  1. 分桶成功的标志 :去 hdfs 中查看数据文件 :( 有多少桶,就产生了多少文件 )
    15,hive 高级,建表,分桶标,视图_第1张图片

8 ,桶的数量划分 :

  1. 不要太大或者太小。
  2. 每个桶的数据量的大小是数据块的两倍。
  3. 例子 : 我们的块 128M 每块,那么我们的每个桶的数据最好是 256M。
  4. 如果我们有 1G 的数据量 : 1024M ,最好是 1024/256 = 4 个桶。

9 ,视图 :

create view idname as select id,name from t_user;

你可能感兴趣的:(15,hive 高级,建表,分桶标,视图)