离线数仓(hive)面试看这一篇就够了

文章详细介绍了Hive中的内部表和外部表的创建、使用及区别,强调了分区和分桶的概念和作用,包括静态与动态分区,以及分桶表的创建和优化。此外,还提到了数据倾斜问题、小文件优化以及Hadoop生态系统中的其他组件。

文件数据上传的实验二:

  1. 创建一个有分隔符信息的表格
    create table stu02(
    id int,
    name string,
    age int
    )
    row format delimited fields terminated by ‘,’;

内部表:通过create table 表名的方法,生成的表格,表格的文件夹的位置在/user/hive/warehouse/数据库名.db,并且表格的文件夹是自动生成的。

  1. 先有一个数据文件
  2. 建立一个与文件格式对应的表格
  3. 将文件导入到表格中

外部表:
上面的所有表格,都称为数据库的内部表,接下来的是数据库的外部表。

外部表的创建和文件关系映射的添加:

  1. 首先,在hdfs里面,有一个文件夹,这个文件夹里面存放的都是同一个内容和格式的文件
    hadoop fs -mkdir /logs_table
    hadoop fs -put log1.txt /logs_table
    2020-12-11,192.168.2.1,登录
    2020-12-11,192.168.2.1,查询华为
    2020-12-11,192.168.2.6,添加杯子到购物车
    hadoop fs -put log2.txt /logs_table
    2020-12-12,192.168.2.7,退出登录
    2020-12-12,192.168.2.9,注册账号
  2. 建立一个和文件格式相同的表格,用这个表格去找文件夹所在的位置
    create external table logs(
    opertetime string,
    ipaddr string,
    operation string
    )row format delimited fields terminated by ‘,’
    location ‘/logs_table’;
  3. 查看表格的内容
    select * from logs;

create external table 表名(
列名 数据类型
)
row format delimited fields terminated by ‘列的分隔符’
location ‘hdfs文件夹的位置’;

内部表和外部表的区别是什么?***
什么是内部表?
直接使用create table创建的表格,表格会自动的在数据库所在的文件夹中,创建一个自己表格名字的文件夹。
删除表的时候,表格的文件夹和数据会一起被删除。

什么是外部表?
使用create external table创建的表格,自己不会生成文件夹,需要使用location去指定一个文件夹给它。
删除表的时候,表格的文件夹和数据会被全部保留下来,insert into的数据也会一起保留下来。

什么时候用内部表,什么时候用外部表?

  1. 保存日志信息或者数据的埋点信息的时候,使用外部表;
  2. 保存sql语句的计算结果的时候,使用内部表;
  3. 其他的业务数据,可以用外部表也可以用内部表,没有具体限制。

分区表:
分区是以文件夹的方式而存在的,在表格中这个分区字段会变成一个虚拟的列,可以直接被用来查询。
目的:分区可以加快表格查询的速度,因为将数据按不同类型分开保存,搜索的时候可以减少检索的数据量;在做表格数据抽取的时候,需要分区管理数据,因为在hive中无法update和delete数据,所以需要通过直接删除分区的方式删除数据。
create [external] table 表名(
列名 数据类型
)
partitioned by (新的字段名 数据类型)
row format delimited fields terminated by ‘列的分隔符’
[location ‘路径’];

两种静态分区的添加:
第一种分区添加的方法,直接加载文件到某个分区中

  1. 创建分区的表格
    create table stu_info(
    id int,
    name string,
    sex string,
    age int
    )
    partitioned by (class string)
    row format delimited fields terminated by ‘,’;
  2. 将linux的文件上传到hdfs
    hadoop fs -put user3.txt /datas
    2.用load的方法,加载文件的内容
    load data inpath ‘hdfs文件的位置和名字’ into table 库名.表名 partition(分区字段=‘分区值’);
    load data inpath ‘/datas/1.txt’ into table bigdata.stu_info partition(class=‘one’);
    load data inpath ‘/datas/2.txt’ into table bigdata.stu_info partition(class=‘two’);

class_one
1001,lilei,男,18
1002,lucy,女,16
1003,tom,男,17
1004,jack,男,18
1005,eve,女,17
1006,allen,男,18

class_two
1007,miller,男,19
1008,flower,女,16
1009,adam,男,17
1010,toly,男,16
1011,steven,男,17
1012,bob,男,18
1013,lucky,女,17

  1. 查看分区表的结构

第二种分区添加的方法,直接加载表格的内容到某个分区中,通过复制表格内容的方式添加分区的信息

  1. 先准备a表和b表,分别是两个班的学生数据
    create table a(
    id int,
    name string,
    sex string,
    age int
    )row format delimited fields terminated by ‘,’;
    load data inpath ‘/datas/1.txt’ into table bigdata.a;

create table b(
id int,
name string,
sex string,
age int
)row format delimited fields terminated by ‘,’;
load data inpath ‘/datas/2.txt’ into table bigdata.b;

  1. 再准备一个汇总学生信息的分区表 c
    create table c(
    id int,
    name string,
    sex string,
    a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一凡888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值