文件数据上传的实验二:
- 创建一个有分隔符信息的表格
create table stu02(
id int,
name string,
age int
)
row format delimited fields terminated by ‘,’;
内部表:通过create table 表名的方法,生成的表格,表格的文件夹的位置在/user/hive/warehouse/数据库名.db,并且表格的文件夹是自动生成的。
- 先有一个数据文件
- 建立一个与文件格式对应的表格
- 将文件导入到表格中
外部表:
上面的所有表格,都称为数据库的内部表,接下来的是数据库的外部表。
外部表的创建和文件关系映射的添加:
- 首先,在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,注册账号 - 建立一个和文件格式相同的表格,用这个表格去找文件夹所在的位置
create external table logs(
opertetime string,
ipaddr string,
operation string
)row format delimited fields terminated by ‘,’
location ‘/logs_table’; - 查看表格的内容
select * from logs;
create external table 表名(
列名 数据类型
)
row format delimited fields terminated by ‘列的分隔符’
location ‘hdfs文件夹的位置’;
内部表和外部表的区别是什么?***
什么是内部表?
直接使用create table创建的表格,表格会自动的在数据库所在的文件夹中,创建一个自己表格名字的文件夹。
删除表的时候,表格的文件夹和数据会一起被删除。
什么是外部表?
使用create external table创建的表格,自己不会生成文件夹,需要使用location去指定一个文件夹给它。
删除表的时候,表格的文件夹和数据会被全部保留下来,insert into的数据也会一起保留下来。
什么时候用内部表,什么时候用外部表?
- 保存日志信息或者数据的埋点信息的时候,使用外部表;
- 保存sql语句的计算结果的时候,使用内部表;
- 其他的业务数据,可以用外部表也可以用内部表,没有具体限制。
分区表:
分区是以文件夹的方式而存在的,在表格中这个分区字段会变成一个虚拟的列,可以直接被用来查询。
目的:分区可以加快表格查询的速度,因为将数据按不同类型分开保存,搜索的时候可以减少检索的数据量;在做表格数据抽取的时候,需要分区管理数据,因为在hive中无法update和delete数据,所以需要通过直接删除分区的方式删除数据。
create [external] table 表名(
列名 数据类型
)
partitioned by (新的字段名 数据类型)
row format delimited fields terminated by ‘列的分隔符’
[location ‘路径’];
两种静态分区的添加:
第一种分区添加的方法,直接加载文件到某个分区中
- 创建分区的表格
create table stu_info(
id int,
name string,
sex string,
age int
)
partitioned by (class string)
row format delimited fields terminated by ‘,’; - 将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
- 查看分区表的结构
第二种分区添加的方法,直接加载表格的内容到某个分区中,通过复制表格内容的方式添加分区的信息
- 先准备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;
-
再准备一个汇总学生信息的分区表 c
create table c(
id int,
name string,
sex string,
a

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

被折叠的 条评论
为什么被折叠?



